Compare commits
167 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6548a12bf1 | ||
|
|
becfa5350b | ||
|
|
ebd2cd7bf7 | ||
|
|
52b4508e08 | ||
|
|
19fdbc14c5 | ||
|
|
63d5aad465 | ||
|
|
9d6ff85893 | ||
|
|
125af63bda | ||
|
|
65c22e475a | ||
|
|
e78e718769 | ||
|
|
40949b3855 | ||
|
|
06ab263e74 | ||
|
|
bccc86c70a | ||
|
|
12640c7d29 | ||
|
|
febc3b1659 | ||
|
|
9fdd69556c | ||
|
|
4735be470a | ||
|
|
3b8e802e42 | ||
|
|
f54d449316 | ||
|
|
1b0fe4d7b9 | ||
|
|
cf1dca9e1a | ||
|
|
45d54ef4e8 | ||
|
|
8bfab0325b | ||
|
|
4b99d00ab5 | ||
|
|
a5961eb066 | ||
|
|
95e19ef163 | ||
|
|
d4eb6577bf | ||
|
|
294b693905 | ||
|
|
23835edc1f | ||
|
|
5f29211f79 | ||
|
|
025f4299ea | ||
|
|
dc50d40886 | ||
|
|
867c49b1b9 | ||
|
|
13f02c95ea | ||
|
|
d55dae73f0 | ||
|
|
34b9831472 | ||
|
|
014a0fc1c9 | ||
|
|
bf17dccd69 | ||
|
|
890168d0d0 | ||
|
|
191aecacdf | ||
|
|
44ec01b136 | ||
|
|
a177da2040 | ||
|
|
c899040688 | ||
|
|
e8af665b3c | ||
|
|
875734d455 | ||
|
|
14d5a79db2 | ||
|
|
e1b2715ee9 | ||
|
|
7ecd5ca55d | ||
|
|
931e7a4d37 | ||
|
|
1792410efe | ||
|
|
8cbd9224f1 | ||
|
|
24b552d619 | ||
|
|
68ae9326bf | ||
|
|
b4626f2787 | ||
|
|
2fc8ed78e4 | ||
|
|
236b25a235 | ||
|
|
a4f6af73ec | ||
|
|
fad74d6438 | ||
|
|
3e2d4c956d | ||
|
|
cd1d623390 | ||
|
|
9e0374d597 | ||
|
|
e47672b495 | ||
|
|
1905be8577 | ||
|
|
4726821e7d | ||
|
|
7ac37ddc1a | ||
|
|
3889742e06 | ||
|
|
6bf3706455 | ||
|
|
612ecaff6c | ||
|
|
a85364ecff | ||
|
|
c0af03c503 | ||
|
|
9b61e4793b | ||
|
|
75a19e74a0 | ||
|
|
21d7e72b0c | ||
|
|
05d555eae5 | ||
|
|
8e412c3eb3 | ||
|
|
80147a9ebc | ||
|
|
3f6a3e25f1 | ||
|
|
800cbeef9d | ||
|
|
574f6a976f | ||
|
|
030b360e57 | ||
|
|
b883714192 | ||
|
|
d556f48168 | ||
|
|
cd7cac0eec | ||
|
|
9b31f18470 | ||
|
|
42a194b3d7 | ||
|
|
6748a7125e | ||
|
|
c2b3f29f3b | ||
|
|
572a634d90 | ||
|
|
652606ffb0 | ||
|
|
803537c63e | ||
|
|
4648c2d9af | ||
|
|
edceb3e7e9 | ||
|
|
da6bddcd77 | ||
|
|
b11f43e903 | ||
|
|
ef218a4d2e | ||
|
|
b061f27e7a | ||
|
|
8e64d54ab1 | ||
|
|
56b40a80ac | ||
|
|
d359d8ecb4 | ||
|
|
2bc55d00bb | ||
|
|
d3cf564b71 | ||
|
|
4fb8b97084 | ||
|
|
32c5cceb1d | ||
|
|
f38c14d6b5 | ||
|
|
3070ca0bc4 | ||
|
|
0122b3f717 | ||
|
|
79678fd82f | ||
|
|
034ddfbafb | ||
|
|
aebd26d03a | ||
|
|
d609823491 | ||
|
|
8f414f783a | ||
|
|
2e521553bf | ||
|
|
e93f5fc812 | ||
|
|
3dbbb7dfd5 | ||
|
|
fbb92e1023 | ||
|
|
ea4c6373f9 | ||
|
|
40b2569a21 | ||
|
|
ef6e4d8f0b | ||
|
|
28ae2ea501 | ||
|
|
657407c7a0 | ||
|
|
b254577bc8 | ||
|
|
63763bedc8 | ||
|
|
3d50d0fdb4 | ||
|
|
1ca6b18f5e | ||
|
|
b82ffc2af3 | ||
|
|
d142151055 | ||
|
|
91b78529fe | ||
|
|
7aec6884f4 | ||
|
|
7f140828bb | ||
|
|
4f13a56814 | ||
|
|
27d3ea253d | ||
|
|
5209b9899d | ||
|
|
6a40c836c0 | ||
|
|
c4df81bdef | ||
|
|
e99827d237 | ||
|
|
a0cbe8efd5 | ||
|
|
b4ee97a768 | ||
|
|
4bdaaaf1ce | ||
|
|
3cf0fea092 | ||
|
|
97e1451dc6 | ||
|
|
4cbb7724f2 | ||
|
|
8f6c2c82d3 | ||
|
|
a6d5001e84 | ||
|
|
6af180a313 | ||
|
|
86cc22d943 | ||
|
|
c1fbfd80d4 | ||
|
|
040a83fb17 | ||
|
|
2bc23a1446 | ||
|
|
97f4c911ed | ||
|
|
53d9a42a1a | ||
|
|
c96c5234c4 | ||
|
|
9a3eb7bc3e | ||
|
|
53f15ba8b8 | ||
|
|
ecdc74b5a6 | ||
|
|
422fdbe2cf | ||
|
|
887bc03f32 | ||
|
|
e32c0c70a8 | ||
|
|
440dfcadfd | ||
|
|
93cc0adb39 | ||
|
|
f8ec85ddae | ||
|
|
688333f756 | ||
|
|
8f314059e4 | ||
|
|
9386a08af0 | ||
|
|
19cd118f8f | ||
|
|
c196f98bc6 | ||
|
|
56ec258cc7 | ||
|
|
5da64a7da0 |
49
ChangeLog.md
49
ChangeLog.md
@@ -1,21 +1,60 @@
|
||||
## Changes from most recent to oldest
|
||||
|
||||
** 19 Jun 2021 - wpferguson - fix issue 312, image_path_in_ui**
|
||||
**25 Mar 2023 - wpferguson**
|
||||
* Added script_manager darktable shortcut integration
|
||||
* Moved filename/path/extension string functions to string library
|
||||
|
||||
** 02 Jun 2021 - wpferguson - fix contrib/quicktag**
|
||||
**06 Mar 2023 - wpferguson - Added option to disable script_manager update check**
|
||||
|
||||
**12 Jan 2022 - wpferguson - Documented contrib/rename_images.lua**
|
||||
|
||||
**28 Dec 2021 - wpferguson - Replaced deprecated _which_ command with _command -v_ in lib/dtutils/file.lua**
|
||||
|
||||
**12 Dec 2021 - wpferguson**
|
||||
* Added deprecated function to library
|
||||
* Added deprecation warning to contrib/rename-tags.lua
|
||||
|
||||
**22 Oct 2021 - wpferguson for Volker Bödker - make sure sequence is 4 digits in rename_images.lua**
|
||||
|
||||
**31 Aug 2021 - wpferguson - remove styles hiding from AutoGrouper.lua**
|
||||
|
||||
**02 Jul 2021 - wpferguson - merged API-7.0.0-dev branch to master**
|
||||
* API-7.0.0 is darktable 3.6
|
||||
* breaking changes
|
||||
* register_event argments changed
|
||||
* register_action arguments changed
|
||||
* register_selection arguments changed
|
||||
* register_event arguments changed
|
||||
* scripts updated to API-7.0.0 compatibility
|
||||
* script_manger updated to be API aware and check out the proper branch
|
||||
based on darktable API version
|
||||
|
||||
**01 Jul 2021 - wpferguson - created branch for API-6.1.0 - darktable 3.4**
|
||||
|
||||
**20 Jun 2021 - wpferguson - created branches for older API versions**
|
||||
* API-6.0.0 - darktable 3.2.1
|
||||
* API-5.0.2 - darktable 3.0
|
||||
* API-5.0.1 - darktable 2.6.1
|
||||
* API-5.0.0 - darktable 2.4
|
||||
* API-4.0.0 - darktable 2.2
|
||||
* API-3.0.0 - darktable 2.0
|
||||
|
||||
**19 Jun 2021 - wpferguson - fix issue 312, image_path_in_ui**
|
||||
|
||||
**02 Jun 2021 - wpferguson - fix contrib/quicktag**
|
||||
* set new entry field is_password to false so entry
|
||||
is visible to user while typing.
|
||||
|
||||
** 19 Mar 2021 - wpferguson - fixed crash in contrib/HDRmerge.lua**
|
||||
**19 Mar 2021 - wpferguson - fixed crash in contrib/HDRmerge.lua**
|
||||
* Made generated filename routine gracefully handle names that
|
||||
are not in the expected format.
|
||||
|
||||
** 15 Mar 2021 - scheckmedia - updated contrib/photils.lua**
|
||||
**15 Mar 2021 - scheckmedia - updated contrib/photils.lua**
|
||||
* refactor print method
|
||||
* add option to apply selected tags from a single image to multiple images
|
||||
* add setting parameter to enable/disable the export of an image before tag suggestion
|
||||
|
||||
** 25 Feb 2021 - wpferguson - added detached mode to contrib/gimp.lua**
|
||||
**25 Feb 2021 - wpferguson - added detached mode to contrib/gimp.lua**
|
||||
|
||||
* Added run_detached checkbox to the exporter GUI. Selecting run_detached
|
||||
let's GIMP keep running and accepting additional images. It does not return
|
||||
|
||||
38
README.md
38
README.md
@@ -34,36 +34,39 @@ These scripts are contributed by users. They are meant to have an "owner", i.e.
|
||||
|
||||
Name|Standalone|OS |Purpose
|
||||
----|:--------:|:---:|-------
|
||||
[AutoGrouper](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/AutoGrouper)|Yes|LMW|Group images together by time
|
||||
[AutoGrouper](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/autogrouper)|Yes|LMW|Group images together by time
|
||||
[autostyle](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/autostyle)|Yes|LMW|Automatically apply styles on import
|
||||
[clear_GPS](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/clear_GPS)|Yes|LMW|Reset GPS information for selected images
|
||||
[CollectHelper](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/CollectHelper)|Yes|LMW|Add buttons to selected images module to manipulate the collection
|
||||
change_group_leader|Yes|LMW|Change which image leads group
|
||||
[clear_GPS](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/clear_gps)|Yes|LMW|Reset GPS information for selected images
|
||||
[CollectHelper](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/collecthelper)|Yes|LMW|Add buttons to selected images module to manipulate the collection
|
||||
[copy_attach_detach_tags](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/copy_attach_detach_tags)|Yes|LMW|Copy and paste tags from/to images
|
||||
[cr2hdr](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/cr2hdr)|Yes|L|Process image created with Magic Lantern Dual ISO
|
||||
[enfuseAdvanced](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/enfuseAdvanced)|No|LMW|Merge multiple images into Dynamic Range Increase (DRI) or Depth From Focus (DFF) images
|
||||
[exportLUT](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/exportLUT)|Yes|LMW|Create a LUT from a style and export it
|
||||
[enfuseAdvanced](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/enfuseadvanced)|No|LMW|Merge multiple images into Dynamic Range Increase (DRI) or Depth From Focus (DFF) images
|
||||
[exportLUT](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/exportlut)|Yes|LMW|Create a LUT from a style and export it
|
||||
[ext_editor](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/ext_editor)|No|LW|Export pictures to collection and edit them with up to nine user-defined external editors
|
||||
[face_recognition](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/face_recognition)|No|LM|Identify and tag images using facial recognition
|
||||
[fujifilm_dynamic_range](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/fujifilm_dynamic_range)|No|LMW|Correct fujifilm exposure based on exposure bias camera setting
|
||||
[fujifilm_ratings](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/fujifilm_ratings)|No|LM|Support importing Fujifilm ratings
|
||||
[geoJSON_export](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/geoJSON_export)|No|L|Create a geo JSON script with thumbnails for use in ...
|
||||
[geoToolbox](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/geoToolbox)|No|LMW|A toolbox of geo functions
|
||||
[geoJSON_export](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/geojson_export)|No|L|Create a geo JSON script with thumbnails for use in ...
|
||||
[geoToolbox](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/geotoolbox)|No|LMW|A toolbox of geo functions
|
||||
[gimp](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/gimp)|No|LMW|Open an image in GIMP for editing and return the result
|
||||
[gpx_export](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/gpx_export)|No|LMW|Export a GPX track file from selected images GPS data
|
||||
[HDRMerge](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/HDRMerge)|No|LMW|Combine the selected images into an HDR DNG and return the result
|
||||
[HDRMerge](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/hdrmerge)|No|LMW|Combine the selected images into an HDR DNG and return the result
|
||||
[hugin](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/hugin)|No|LMW|Combine selected images into a panorama and return the result
|
||||
[image_stack](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/image_stack)|No|LMW|Combine a stack of images to remove noise or transient objects
|
||||
[image_time](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/image_time)|Yes|LMW|Adjust the EXIF image time
|
||||
[kml_export](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/kml_export)|No|L|Export photos with a KML file for usage in Google Earth
|
||||
[LabelsToTags](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/LabelsToTags)|Yes|LMW|Apply tags based on color labels and ratings
|
||||
[OpenInExplorer](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/OpenInExplorer)|No|LMW|Open the selected images in the system file manager
|
||||
[LabelsToTags](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/labelstotags)|Yes|LMW|Apply tags based on color labels and ratings
|
||||
[OpenInExplorer](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/openinexplorer)|No|LMW|Open the selected images in the system file manager
|
||||
[passport_guide](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/passport_guide)|Yes|LMW|Add passport cropping guide to darkroom crop tool
|
||||
[pdf_slideshow](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/pdf_slideshow)|No|LM|Export images to a PDF slideshow
|
||||
[photils](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/photils)|No|LM|Automatic tag suggestions for your images
|
||||
[quicktag](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/quicktag)|Yes|LMW|Create shortcuts for quickly applying tags
|
||||
[rate_group](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/rate_group)|Yes|LMW|Apply or remove a star rating from grouped images
|
||||
[rename_images](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/rename_images)|Yes|LMW|Rename single or multiple images
|
||||
[rename-tags](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/rename-tags)|Yes|LMW|Change a tag name
|
||||
[RL_out_sharp](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/RL_out_sharp)|No|LW|Output sharpening using GMic (Richardson-Lucy algorithm)
|
||||
[RL_out_sharp](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/rl_out_sharp)|No|LW|Output sharpening using GMic (Richardson-Lucy algorithm)
|
||||
[select_non_existing](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/select_non_existing)|Yes|LMW|Enable selection of non-existing images in the the currently worked on images
|
||||
[select_untagged](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/select_untagged)|Yes|LMW|Enable selection of untagged images
|
||||
[slideshowMusic](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/slideshowMusic)|No|L|Play music during a slideshow
|
||||
[transfer_hierarchy](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/transfer_hierarchy)|Yes|LMW|Image move/copy preserving directory hierarchy
|
||||
@@ -77,14 +80,14 @@ Name|Standalone|OS |Purpose
|
||||
----|:--------:|:---:|-------
|
||||
[api_version](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/examples/api_version)|Yes|LMW|Print the current API version
|
||||
[darkroom_demo](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/examples/darkroom_demo)|Yes|LMW|Demonstrate changing images in darkoom
|
||||
[gettextExample](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/examples/gettextExample)|Yes|LM|How to use translation
|
||||
[gettextExample](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/examples/gettextexample)|Yes|LM|How to use translation
|
||||
[hello_world](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/examples/hello_world)|Yes|LMW|Prints hello world when darktable starts
|
||||
[lighttable_demo](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/examples/lighttable_demo)|Yes|LMW|Demonstrate controlling lighttable mode, zoom, sorting and filtering
|
||||
[moduleExample](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/examples/moduleExample)|Yes|LMW|How to create a lighttable module
|
||||
[moduleExample](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/examples/moduleexample)|Yes|LMW|How to create a lighttable module
|
||||
[multi_os](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/examples/multi_os)|No|LMW|How to create a cross platform script that calls an external executable
|
||||
[panels_demo](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/examples/panels_demo)|Yes|LMW|Demonstrate hiding and showing darktable panels
|
||||
[preferenceExamples](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/examples/preferenceExamples)|Yes|LMW|How to use preferences in a script
|
||||
[printExamples](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/examples/printExamples)|Yes|LMW|How to use various print functions from a script
|
||||
[preferenceExamples](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/examples/preferenceexamples)|Yes|LMW|How to use preferences in a script
|
||||
[printExamples](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/examples/printexamples)|Yes|LMW|How to use various print functions from a script
|
||||
[running_os](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/examples/running_os)|Yes|LMW|Print out the running operating system
|
||||
|
||||
### Tools
|
||||
@@ -114,6 +117,7 @@ The following third-party projects are listed for information only. Think of thi
|
||||
* [arru/darktable-scripts](https://github.com/arru/darktable-scripts)
|
||||
* [nbremond77/darktable](https://github.com/nbremond77/darktable/tree/master/scripts)
|
||||
* [s5k6/dtscripts](https://github.com/s5k6/dtscripts)
|
||||
* [ChristianBirzer/darktable_extra_scripts](https://github.com/ChristianBirzer/darktable_extra_scripts)
|
||||
|
||||
## Download and Install
|
||||
|
||||
@@ -171,7 +175,7 @@ The recommended way to enable and disable specific scripts is using the script m
|
||||
|
||||
### Windows
|
||||
|
||||
echo "require 'tools/script_manager'" > %LOCALAPPDATA%\darktable\luarc
|
||||
echo require "tools/script_manager" > %LOCALAPPDATA%\darktable\luarc
|
||||
|
||||
### Snap
|
||||
|
||||
@@ -179,7 +183,7 @@ The recommended way to enable and disable specific scripts is using the script m
|
||||
|
||||
### Flatpak
|
||||
|
||||
echo require "tools/script_manager"' > ~/.var/app/org.darktable.Darktable/config/darktable/luarc
|
||||
echo 'require "tools/script_manager"' > ~/.var/app/org.darktable.Darktable/config/darktable/luarc
|
||||
|
||||
You can also create or add lines to the luarc file from the command line:
|
||||
|
||||
|
||||
@@ -37,14 +37,27 @@ selected images, the other button performs grouping on the entire active collect
|
||||
]]
|
||||
|
||||
local dt = require "darktable"
|
||||
local du = require "lib/dtutils"
|
||||
|
||||
du.check_min_api_version("7.0.0", "AutoGrouper")
|
||||
|
||||
local MOD = 'autogrouper'
|
||||
|
||||
-- return data structure for script_manager
|
||||
|
||||
local script_data = {}
|
||||
|
||||
script_data.destroy = nil -- function to destory the script
|
||||
script_data.destroy_method = nil -- set to hide for libs since we can't destroy them commpletely yet, otherwise leave as nil
|
||||
script_data.restart = nil -- how to restart the (lib) script after it's been hidden - i.e. make it visible again
|
||||
script_data.show = nil -- only required for libs since the destroy_method only hides them
|
||||
|
||||
local gettext = dt.gettext
|
||||
-- Tell gettext where to find the .mo file translating messages for a particular domain
|
||||
local CURR_API_STRING = dt.configuration_api_version_string
|
||||
gettext.bindtextdomain("AutoGrouper",dt.configuration.config_dir.."/lua/locale/")
|
||||
|
||||
local function _(msgid)
|
||||
return gettext.dgettext("AutoGrouper", msgid)
|
||||
return gettext.dgettext("AutoGrouper", msgid)
|
||||
end
|
||||
|
||||
local Ag = {}
|
||||
@@ -52,123 +65,134 @@ Ag.module_installed = false
|
||||
Ag.event_registered = false
|
||||
|
||||
local GUI = {
|
||||
gap = {},
|
||||
selected = {},
|
||||
collection = {}
|
||||
gap = {},
|
||||
selected = {},
|
||||
collection = {}
|
||||
}
|
||||
|
||||
|
||||
local function InRange(test, low, high) --tests if test value is within range of low and high (inclusive)
|
||||
if test >= low and test <= high then
|
||||
return true
|
||||
else
|
||||
return false
|
||||
end
|
||||
if test >= low and test <= high then
|
||||
return true
|
||||
else
|
||||
return false
|
||||
end
|
||||
end
|
||||
|
||||
local function CompTime(first, second) --compares the timestamps and returns true if first was taken before second
|
||||
first_time = first.exif_datetime_taken
|
||||
if string.match(first_time, '[0-9]') == nil then first_time = '9999:99:99 99:99:99' end
|
||||
first_time = tonumber(string.gsub(first_time, '[^0-9]*',''))
|
||||
second_time = second.exif_datetime_taken
|
||||
if string.match(second_time, '[0-9]') == nil then second_time = '9999:99:99 99:99:99' end
|
||||
second_time = tonumber(string.gsub(second_time, '[^0-9]*',''))
|
||||
return first_time < second_time
|
||||
first_time = first.exif_datetime_taken
|
||||
if string.match(first_time, '[0-9]') == nil then first_time = '9999:99:99 99:99:99' end
|
||||
first_time = tonumber(string.gsub(first_time, '[^0-9]*',''))
|
||||
second_time = second.exif_datetime_taken
|
||||
if string.match(second_time, '[0-9]') == nil then second_time = '9999:99:99 99:99:99' end
|
||||
second_time = tonumber(string.gsub(second_time, '[^0-9]*',''))
|
||||
return first_time < second_time
|
||||
end
|
||||
|
||||
local function SeperateTime(str) --seperates the timestamp into individual components for used with OS.time operations
|
||||
local cleaned = string.gsub(str, '[^%d]',':')
|
||||
cleaned = string.gsub(cleaned, '::*',':') --YYYY:MM:DD:hh:mm:ss
|
||||
local year = string.sub(cleaned,1,4)
|
||||
local month = string.sub(cleaned,6,7)
|
||||
local day = string.sub(cleaned,9,10)
|
||||
local hour = string.sub(cleaned,12,13)
|
||||
local min = string.sub(cleaned,15,16)
|
||||
local sec = string.sub(cleaned,18,19)
|
||||
return {year = year, month = month, day = day, hour = hour, min = min, sec = sec}
|
||||
local cleaned = string.gsub(str, '[^%d]',':')
|
||||
cleaned = string.gsub(cleaned, '::*',':') --YYYY:MM:DD:hh:mm:ss
|
||||
local year = string.sub(cleaned,1,4)
|
||||
local month = string.sub(cleaned,6,7)
|
||||
local day = string.sub(cleaned,9,10)
|
||||
local hour = string.sub(cleaned,12,13)
|
||||
local min = string.sub(cleaned,15,16)
|
||||
local sec = string.sub(cleaned,18,19)
|
||||
return {year = year, month = month, day = day, hour = hour, min = min, sec = sec}
|
||||
end
|
||||
|
||||
local function GetTimeDiff(curr_image, prev_image) --returns the time difference (in sec.) from current image and the previous image
|
||||
local curr_time = SeperateTime(curr_image.exif_datetime_taken)
|
||||
local prev_time = SeperateTime(prev_image.exif_datetime_taken)
|
||||
return os.time(curr_time)-os.time(prev_time)
|
||||
local curr_time = SeperateTime(curr_image.exif_datetime_taken)
|
||||
local prev_time = SeperateTime(prev_image.exif_datetime_taken)
|
||||
return os.time(curr_time)-os.time(prev_time)
|
||||
end
|
||||
|
||||
local function main(on_collection)
|
||||
local images = {}
|
||||
if on_collection then
|
||||
local col_images = dt.collection
|
||||
for i,image in ipairs(col_images) do --copy images to a standard table, table.sort barfs on type dt_lua_singleton_image_collection
|
||||
table.insert(images,i,image)
|
||||
end
|
||||
else
|
||||
images = dt.gui.selection()
|
||||
local images = {}
|
||||
if on_collection then
|
||||
local col_images = dt.collection
|
||||
for i,image in ipairs(col_images) do --copy images to a standard table, table.sort barfs on type dt_lua_singleton_image_collection
|
||||
table.insert(images,i,image)
|
||||
end
|
||||
dt.preferences.write(MOD, 'active_gap', 'integer', GUI.gap.value)
|
||||
if #images < 2 then
|
||||
dt.print('please select at least 2 images')
|
||||
return
|
||||
end
|
||||
table.sort(images, function(first, second) return CompTime(first,second) end) --sort images by timestamp
|
||||
|
||||
for i, image in ipairs(images) do
|
||||
if i == 1 then
|
||||
prev_image = image
|
||||
elseif string.match(image.exif_datetime_taken, '[%d]') ~= nil then --make sure current image has a timestamp, if so check if it is within the user specified gap value and add to group
|
||||
local curr_image = image
|
||||
if GetTimeDiff(curr_image, prev_image) <= GUI.gap.value then
|
||||
images[i]:group_with(images[i-1])
|
||||
end
|
||||
prev_image = curr_image
|
||||
end
|
||||
else
|
||||
images = dt.gui.selection()
|
||||
end
|
||||
dt.preferences.write(MOD, 'active_gap', 'integer', GUI.gap.value)
|
||||
if #images < 2 then
|
||||
dt.print('please select at least 2 images')
|
||||
return
|
||||
end
|
||||
table.sort(images, function(first, second) return CompTime(first,second) end) --sort images by timestamp
|
||||
|
||||
for i, image in ipairs(images) do
|
||||
if i == 1 then
|
||||
prev_image = image
|
||||
elseif string.match(image.exif_datetime_taken, '[%d]') ~= nil then --make sure current image has a timestamp, if so check if it is within the user specified gap value and add to group
|
||||
local curr_image = image
|
||||
if GetTimeDiff(curr_image, prev_image) <= GUI.gap.value then
|
||||
images[i]:group_with(images[i-1])
|
||||
end
|
||||
prev_image = curr_image
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function install_module()
|
||||
if not Ag.module_installed then
|
||||
dt.print_log("installing module")
|
||||
dt.register_lib(
|
||||
'AutoGroup_Lib', -- Module name
|
||||
_('auto group'), -- name
|
||||
true, -- expandable
|
||||
true, -- resetable
|
||||
{[dt.gui.views.lighttable] = {"DT_UI_CONTAINER_PANEL_RIGHT_CENTER", 99}}, -- containers
|
||||
dt.new_widget("box"){
|
||||
orientation = "vertical",
|
||||
GUI.gap,
|
||||
GUI.selected,
|
||||
GUI.collection
|
||||
}
|
||||
MOD, -- Module name
|
||||
_('auto group'), -- name
|
||||
true, -- expandable
|
||||
true, -- resetable
|
||||
{[dt.gui.views.lighttable] = {"DT_UI_CONTAINER_PANEL_RIGHT_CENTER", 99}}, -- containers
|
||||
dt.new_widget("box"){
|
||||
orientation = "vertical",
|
||||
GUI.gap,
|
||||
GUI.selected,
|
||||
GUI.collection
|
||||
}
|
||||
)
|
||||
Ag.module_installed = true
|
||||
dt.print_log("module installed")
|
||||
dt.print_log("styles module visibility is " .. tostring(dt.gui.libs["styles"].visible))
|
||||
end
|
||||
end
|
||||
|
||||
local function destroy()
|
||||
dt.gui.libs[MOD].visible = false
|
||||
end
|
||||
|
||||
local function restart()
|
||||
dt.gui.libs[MOD].visible = true
|
||||
end
|
||||
|
||||
-- GUI --
|
||||
temp = dt.preferences.read(MOD, 'active_gap', 'integer')
|
||||
if not InRange(temp, 1, 86400) then temp = 3 end
|
||||
GUI.gap = dt.new_widget('slider'){
|
||||
label = _('group gap [sec.]'),
|
||||
tooltip = _('minimum gap, in seconds, between groups'),
|
||||
soft_min = 1,
|
||||
soft_max = 60,
|
||||
hard_min = 1,
|
||||
hard_max = 86400,
|
||||
step = 1,
|
||||
digits = 0,
|
||||
value = temp,
|
||||
reset_callback = function(self)
|
||||
self.value = 3
|
||||
end
|
||||
label = _('group gap [sec.]'),
|
||||
tooltip = _('minimum gap, in seconds, between groups'),
|
||||
soft_min = 1,
|
||||
soft_max = 60,
|
||||
hard_min = 1,
|
||||
hard_max = 86400,
|
||||
step = 1,
|
||||
digits = 0,
|
||||
value = temp,
|
||||
reset_callback = function(self)
|
||||
self.value = 3
|
||||
end
|
||||
}
|
||||
GUI.selected = dt.new_widget("button"){
|
||||
label = _('auto group: selected'),
|
||||
tooltip =_('auto group selected images'),
|
||||
clicked_callback = function() main(false) end
|
||||
label = _('auto group: selected'),
|
||||
tooltip =_('auto group selected images'),
|
||||
clicked_callback = function() main(false) end
|
||||
}
|
||||
GUI.collection = dt.new_widget("button"){
|
||||
label = _('auto group: collection'),
|
||||
tooltip =_('auto group the entire collection'),
|
||||
clicked_callback = function() main(true) end
|
||||
label = _('auto group: collection'),
|
||||
tooltip =_('auto group the entire collection'),
|
||||
clicked_callback = function() main(true) end
|
||||
}
|
||||
|
||||
if dt.gui.current_view().id == "lighttable" then
|
||||
@@ -176,14 +200,20 @@ if dt.gui.current_view().id == "lighttable" then
|
||||
else
|
||||
if not Ag.event_registered then
|
||||
dt.register_event(
|
||||
"view-changed",
|
||||
function(event, old_view, new_view)
|
||||
if new_view.name == "lighttable" and old_view.name == "darkroom" then
|
||||
install_module()
|
||||
end
|
||||
end
|
||||
)
|
||||
Ag.event_registered = true
|
||||
"AutoGrouper", "view-changed",
|
||||
function(event, old_view, new_view)
|
||||
if new_view.name == "lighttable" and old_view.name == "darkroom" then
|
||||
install_module()
|
||||
end
|
||||
end
|
||||
)
|
||||
Ag.event_registered = true
|
||||
end
|
||||
end
|
||||
|
||||
script_data.destroy = destroy
|
||||
script_data.destroy_method = "hide"
|
||||
script_data.restart = restart
|
||||
script_data.show = restart
|
||||
|
||||
return script_data
|
||||
|
||||
@@ -46,6 +46,7 @@ In the "Selected Images" module click on "Collect on this Image"
|
||||
]]
|
||||
|
||||
local dt = require "darktable"
|
||||
local du = require "lib/dtutils"
|
||||
local gettext = dt.gettext
|
||||
local previous = nil
|
||||
local all_active = false
|
||||
@@ -53,7 +54,16 @@ local all_active = false
|
||||
-- Tell gettext where to find the .mo file translating messages for a particular domain
|
||||
gettext.bindtextdomain("CollectHelper",dt.configuration.config_dir.."/lua/locale/")
|
||||
|
||||
local CURR_API_STRING = dt.configuration.api_version_string
|
||||
du.check_min_api_version("7.0.0", "CollectHelper")
|
||||
|
||||
-- return data structure for script_manager
|
||||
|
||||
local script_data = {}
|
||||
|
||||
script_data.destroy = nil -- function to destory the script
|
||||
script_data.destroy_method = nil -- set to hide for libs since we can't destroy them commpletely yet, otherwise leave as nil
|
||||
script_data.restart = nil -- how to restart the (lib) script after it's been hidden - i.e. make it visible again
|
||||
script_data.show = nil -- only required for libs since the destroy_method only hides them
|
||||
|
||||
local function _(msgid)
|
||||
return gettext.dgettext("CollectHelper", msgid)
|
||||
@@ -67,6 +77,7 @@ local function CheckSingleImage(selection)
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
local function CheckHasColorLabel(selection)
|
||||
local ret = false
|
||||
for _,image in pairs(selection) do
|
||||
@@ -83,6 +94,7 @@ local function PreviousCollection()
|
||||
previous = dt.gui.libs.collect.filter(previous)
|
||||
end
|
||||
end
|
||||
|
||||
local function CollectOnFolder(all_rules, all_active)
|
||||
local images = dt.gui.selection()
|
||||
if CheckSingleImage(images) then
|
||||
@@ -103,6 +115,7 @@ local function CollectOnFolder(all_rules, all_active)
|
||||
previous = dt.gui.libs.collect.filter(rules)
|
||||
end
|
||||
end
|
||||
|
||||
local function CollectOnColors(all_rules, all_active)
|
||||
local images = dt.gui.selection()
|
||||
if CheckSingleImage(images) then
|
||||
@@ -159,6 +172,7 @@ local function CollectOnColors(all_rules, all_active)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function CollectOnAll_AND()
|
||||
local images = dt.gui.selection()
|
||||
if CheckSingleImage(images) then
|
||||
@@ -174,29 +188,42 @@ local function CollectOnAll_AND()
|
||||
previous = dt.gui.libs.collect.filter(rules)
|
||||
end
|
||||
|
||||
local function destroy()
|
||||
dt.gui.libs.image.destroy_action("CollectHelper_prev")
|
||||
if dt.preferences.read('module_CollectHelper','folder','bool') then
|
||||
dt.gui.libs.image.destroy_action("CollectHelper_folder")
|
||||
end
|
||||
if dt.preferences.read('module_CollectHelper','colors','bool') then
|
||||
dt.gui.libs.image.destroy_action("CollectHelper_labels")
|
||||
end
|
||||
if dt.preferences.read('module_CollectHelper','all_and','bool') then
|
||||
dt.gui.libs.image.destroy_action("CollectHelper_and")
|
||||
end
|
||||
end
|
||||
|
||||
-- GUI --
|
||||
dt.gui.libs.image.register_action(
|
||||
_("collect: previous"),
|
||||
"CollectHelper_prev", _("collect: previous"),
|
||||
function() PreviousCollection() end,
|
||||
_("Sets the Collect parameters to be the previously active parameters")
|
||||
)
|
||||
if dt.preferences.read('module_CollectHelper','folder','bool') then
|
||||
dt.gui.libs.image.register_action(
|
||||
_("collect: folder"),
|
||||
dt.gui.libs.image.register_action(
|
||||
"CollectHelper_folder", _("collect: folder"),
|
||||
function() CollectOnFolder(_ , false) end,
|
||||
_("Sets the Collect parameters to be the selected images's folder")
|
||||
)
|
||||
end
|
||||
if dt.preferences.read('module_CollectHelper','colors','bool') then
|
||||
dt.gui.libs.image.register_action(
|
||||
_("collect: color label(s)"),
|
||||
dt.gui.libs.image.register_action(
|
||||
"CollectHelper_labels", _("collect: color label(s)"),
|
||||
function() CollectOnColors(_ , false) end,
|
||||
_("Sets the Collect parameters to be the selected images's color label(s)")
|
||||
)
|
||||
end
|
||||
if dt.preferences.read('module_CollectHelper','all_and','bool') then
|
||||
dt.gui.libs.image.register_action(
|
||||
_("collect: all (AND)"),
|
||||
dt.gui.libs.image.register_action(
|
||||
"CollectHelper_and", _("collect: all (AND)"),
|
||||
function() CollectOnAll_AND() end,
|
||||
_("Sets the Collect parameters based on all activated CollectHelper options")
|
||||
)
|
||||
@@ -206,7 +233,7 @@ end
|
||||
dt.preferences.register("module_CollectHelper", "all_and", -- name
|
||||
"bool", -- type
|
||||
_('CollectHelper: All'), -- label
|
||||
_('Will create a collect parameter set that utelizes all enabled CollectHelper types (AND)'), -- tooltip
|
||||
_('Will create a collect parameter set that utilizes all enabled CollectHelper types (AND)'), -- tooltip
|
||||
true -- default
|
||||
)
|
||||
dt.preferences.register("module_CollectHelper", "colors", -- name
|
||||
@@ -221,3 +248,7 @@ dt.preferences.register("module_CollectHelper", "folder", -- name
|
||||
_('Enable the button that allows you to swap to a collection based on selected image\'s FOLDER location'), -- tooltip
|
||||
true -- default
|
||||
)
|
||||
|
||||
script_data.destroy = destroy
|
||||
|
||||
return script_data
|
||||
|
||||
@@ -45,9 +45,22 @@ Select a style, whether you want tags to be copied from the original, and any ad
|
||||
]]
|
||||
|
||||
local dt = require 'darktable'
|
||||
local du = require "lib/dtutils"
|
||||
local df = require 'lib/dtutils.file'
|
||||
|
||||
local dsys = require 'lib/dtutils.system'
|
||||
|
||||
du.check_min_api_version("7.0.0", "HDRmerge")
|
||||
|
||||
-- return data structure for script_manager
|
||||
|
||||
local script_data = {}
|
||||
|
||||
script_data.destroy = nil -- function to destory the script
|
||||
script_data.destroy_method = nil -- set to hide for libs since we can't destroy them commpletely yet, otherwise leave as nil
|
||||
script_data.restart = nil -- how to restart the (lib) script after it's been hidden - i.e. make it visible again
|
||||
script_data.show = nil -- only required for libs since the destroy_method only hides them
|
||||
|
||||
|
||||
local mod = 'module_HDRMerge'
|
||||
local os_path_seperator = '/'
|
||||
if dt.configuration.running_os == 'windows' then os_path_seperator = '\\' end
|
||||
@@ -287,6 +300,14 @@ local function install_module()
|
||||
end
|
||||
end
|
||||
|
||||
local function destroy()
|
||||
dt.gui.libs["HDRMerge_Lib"].visible = false
|
||||
end
|
||||
|
||||
local function restart()
|
||||
dt.gui.libs["HDRMerge_Lib"].visible = true
|
||||
end
|
||||
|
||||
-- GUI Elements --
|
||||
local lbl_hdr = dt.new_widget('section_label'){
|
||||
label = _('HDRMerge options')
|
||||
@@ -439,7 +460,7 @@ if dt.gui.current_view().id == "lighttable" then
|
||||
else
|
||||
if not HDRM.event_registered then
|
||||
dt.register_event(
|
||||
"view-changed",
|
||||
"HDRmerge", "view-changed",
|
||||
function(event, old_view, new_view)
|
||||
if new_view.name == "lighttable" and old_view.name == "darkroom" then
|
||||
install_module()
|
||||
@@ -449,3 +470,10 @@ else
|
||||
HDRM.event_registered = true
|
||||
end
|
||||
end
|
||||
|
||||
script_data.destroy = destroy
|
||||
script_data.restart = restart
|
||||
script_data.destroy_method = "hide"
|
||||
script_data.show = restart
|
||||
|
||||
return script_data
|
||||
@@ -50,7 +50,16 @@
|
||||
local darktable = require("darktable")
|
||||
local du = require "lib/dtutils"
|
||||
|
||||
du.check_min_api_version("3.0.0", "LabelsToTags")
|
||||
du.check_min_api_version("7.0.0", "LabelsToTags")
|
||||
|
||||
-- return data structure for script_manager
|
||||
|
||||
local script_data = {}
|
||||
|
||||
script_data.destroy = nil -- function to destory the script
|
||||
script_data.destroy_method = nil -- set to hide for libs since we can't destroy them commpletely yet, otherwise leave as nil
|
||||
script_data.restart = nil -- how to restart the (lib) script after it's been hidden - i.e. make it visible again
|
||||
script_data.show = nil -- only required for libs since the destroy_method only hides them
|
||||
|
||||
-- Lua 5.3 no longer has "unpack" but "table.unpack"
|
||||
unpack = unpack or table.unpack
|
||||
@@ -60,7 +69,6 @@ ltt.module_installed = false
|
||||
ltt.event_registered = false
|
||||
|
||||
local LIB_ID = "LabelsToTags"
|
||||
local CURR_API_STRING = darktable.configuration.api_version_string
|
||||
|
||||
-- Helper functions: BEGIN
|
||||
|
||||
@@ -144,16 +152,16 @@ local mappingComboBox = darktable.new_widget("combobox"){
|
||||
tooltip = getComboboxTooltip(),
|
||||
reset_callback = function(selfC)
|
||||
if selfC == nil then
|
||||
return
|
||||
return
|
||||
end
|
||||
i = 1
|
||||
for _,m in pairs(keySet(getAvailableMappings())) do
|
||||
selfC[i] = m
|
||||
i = i+1
|
||||
selfC[i] = m
|
||||
i = i+1
|
||||
end
|
||||
n = #selfC
|
||||
for j = i,n do
|
||||
selfC[i] = nil
|
||||
selfC[i] = nil
|
||||
end
|
||||
selfC.value = 1
|
||||
selfC.tooltip = getComboboxTooltip()
|
||||
@@ -172,17 +180,17 @@ local function doTagging(selfC)
|
||||
local tagsToApply = {}
|
||||
local hash = generateLabelHash(img)
|
||||
for k,v in pairs(availableMappings[mappingComboBox.value]) do
|
||||
if hashMatch(hash,k) then
|
||||
for _,tag in ipairs(v) do
|
||||
tagsToApply[tag] = true
|
||||
end
|
||||
end
|
||||
if hashMatch(hash,k) then
|
||||
for _,tag in ipairs(v) do
|
||||
tagsToApply[tag] = true
|
||||
end
|
||||
end
|
||||
end
|
||||
for k,_ in pairs(tagsToApply) do
|
||||
if memoizedTags[k] == nil then
|
||||
memoizedTags[k] = darktable.tags.create(k)
|
||||
end
|
||||
darktable.tags.attach(memoizedTags[k],img)
|
||||
if memoizedTags[k] == nil then
|
||||
memoizedTags[k] = darktable.tags.create(k)
|
||||
end
|
||||
darktable.tags.attach(memoizedTags[k],img)
|
||||
end
|
||||
job.percent = job.percent + pctIncrement
|
||||
end
|
||||
@@ -208,14 +216,14 @@ darktable.register_tag_mapping = function(name, mapping)
|
||||
end
|
||||
for pattern,tags in pairs(mapping) do
|
||||
if string.match(pattern,PATTERN_PATTERN) == nil then
|
||||
darktable.print_error("In tag mapping '" .. name .. "': Pattern '" .. pattern .. "' invalid")
|
||||
return
|
||||
darktable.print_error("In tag mapping '" .. name .. "': Pattern '" .. pattern .. "' invalid")
|
||||
return
|
||||
end
|
||||
for _,tag in ipairs(tags) do
|
||||
if type(tag) ~= "string" then
|
||||
darktable.print_error("In tag mapping '" .. name .. "': All tag mappings must be lists of strings")
|
||||
return
|
||||
end
|
||||
if type(tag) ~= "string" then
|
||||
darktable.print_error("In tag mapping '" .. name .. "': All tag mappings must be lists of strings")
|
||||
return
|
||||
end
|
||||
end
|
||||
end
|
||||
availableMappings[name] = mapping
|
||||
@@ -231,6 +239,14 @@ local function install_module()
|
||||
end
|
||||
end
|
||||
|
||||
local function destroy()
|
||||
darktable.gui.libs[LIB_ID].visible = false
|
||||
end
|
||||
|
||||
local function restart()
|
||||
darktable.gui.libs[LIB_ID].visible = true
|
||||
end
|
||||
|
||||
--[[
|
||||
darktable.register_tag_mapping("Example",
|
||||
{ ["+----*"] = { "Red", "Only red" },
|
||||
@@ -248,7 +264,7 @@ if darktable.gui.current_view().id == "lighttable" then
|
||||
else
|
||||
if not ltt.event_registered then
|
||||
darktable.register_event(
|
||||
"view-changed",
|
||||
LIB_ID, "view-changed",
|
||||
function(event, old_view, new_view)
|
||||
if new_view.name == "lighttable" and old_view.name == "darkroom" then
|
||||
install_module()
|
||||
@@ -259,3 +275,9 @@ else
|
||||
end
|
||||
end
|
||||
|
||||
script_data.destroy = destroy
|
||||
script_data.restart = restart
|
||||
script_data.destroy_method = "hide"
|
||||
script_data.show = restart
|
||||
|
||||
return script_data
|
||||
|
||||
@@ -54,7 +54,16 @@ local dsys = require "lib/dtutils.system"
|
||||
local gettext = dt.gettext
|
||||
|
||||
--Check API version
|
||||
du.check_min_api_version("5.0.0", "OpenInExplorer")
|
||||
du.check_min_api_version("7.0.0", "OpenInExplorer")
|
||||
|
||||
-- return data structure for script_manager
|
||||
|
||||
local script_data = {}
|
||||
|
||||
script_data.destroy = nil -- function to destory the script
|
||||
script_data.destroy_method = nil -- set to hide for libs since we can't destroy them commpletely yet, otherwise leave as nil
|
||||
script_data.restart = nil -- how to restart the (lib) script after it's been hidden - i.e. make it visible again
|
||||
script_data.show = nil -- only required for libs since the destroy_method only hides them
|
||||
|
||||
-- Tell gettext where to find the .mo file translating messages for a particular domain
|
||||
gettext.bindtextdomain("OpenInExplorer",dt.configuration.config_dir.."/lua/locale/")
|
||||
@@ -65,7 +74,6 @@ end
|
||||
|
||||
local act_os = dt.configuration.running_os
|
||||
local PS = act_os == "windows" and "\\" or "/"
|
||||
local CURR_API_STRING = dt.configuration.api_version_string
|
||||
|
||||
--Detect OS and quit if it is not supported.
|
||||
if act_os ~= "macos" and act_os ~= "windows" and act_os ~= "linux" then
|
||||
@@ -181,13 +189,23 @@ local function open_in_fmanager()
|
||||
end
|
||||
end
|
||||
|
||||
local function destroy()
|
||||
dt.gui.libs.image.destroy_action("OpenInExplorer")
|
||||
dt.destroy_event("OpenInExplorer", "shortcut")
|
||||
if act_os ~= "windows" then
|
||||
dt.preferences.destroy("OpenInExplorer", "linked_image_files_dir")
|
||||
end
|
||||
dt.preferences.destroy("OpenInExplorer", "use_links")
|
||||
end
|
||||
|
||||
|
||||
-- GUI --
|
||||
dt.gui.libs.image.register_action(
|
||||
_("show in file explorer"),
|
||||
"OpenInExplorer", _("show in file explorer"),
|
||||
function() open_in_fmanager() end,
|
||||
_("Open the file manager at the selected image's location")
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
if act_os ~= "windows" then
|
||||
dt.preferences.register("OpenInExplorer", "linked_image_files_dir", -- name
|
||||
@@ -210,8 +228,11 @@ if act_os ~= "windows" then
|
||||
end
|
||||
|
||||
dt.register_event(
|
||||
"shortcut",
|
||||
"OpenInExplorer", "shortcut",
|
||||
function(event, shortcut) open_in_fmanager() end,
|
||||
"OpenInExplorer"
|
||||
)
|
||||
|
||||
script_data.destroy = destroy
|
||||
|
||||
return script_data
|
||||
|
||||
@@ -63,7 +63,16 @@ local dtsys = require "lib/dtutils.system"
|
||||
local MODULE_NAME = "RL_out_sharp"
|
||||
|
||||
-- check API version
|
||||
du.check_min_api_version("5.0.0", MODULE_NAME)
|
||||
du.check_min_api_version("7.0.0", MODULE_NAME)
|
||||
|
||||
-- return data structure for script_manager
|
||||
|
||||
local script_data = {}
|
||||
|
||||
script_data.destroy = nil -- function to destory the script
|
||||
script_data.destroy_method = nil -- set to hide for libs since we can't destroy them commpletely yet, otherwise leave as nil
|
||||
script_data.restart = nil -- how to restart the (lib) script after it's been hidden - i.e. make it visible again
|
||||
script_data.show = nil -- only required for libs since the destroy_method only hides them
|
||||
|
||||
-- OS compatibility
|
||||
local PS = dt.configuration.running_os == "windows" and "\\" or "/"
|
||||
@@ -155,6 +164,12 @@ local function export2RL(storage, image_table, extra_data)
|
||||
dt.print(_("finished exporting"))
|
||||
end
|
||||
|
||||
-- script_manager integration
|
||||
|
||||
local function destroy()
|
||||
dt.destroy_storage("exp2RL")
|
||||
end
|
||||
|
||||
-- new widgets ----------------------------------------------------------------
|
||||
|
||||
output_folder_selector = dt.new_widget("file_chooser_button"){
|
||||
@@ -224,6 +239,12 @@ sigma_slider.value = dt.preferences.read(MODULE_NAME, "sigma", "float")
|
||||
iterations_slider.value = dt.preferences.read(MODULE_NAME, "iterations", "float")
|
||||
jpg_quality_slider.value = dt.preferences.read(MODULE_NAME, "jpg_quality", "float")
|
||||
|
||||
-- script_manager integration
|
||||
|
||||
script_data.destroy = destroy
|
||||
|
||||
return script_data
|
||||
|
||||
-- end of script --------------------------------------------------------------
|
||||
|
||||
-- vim: shiftwidth=2 expandtab tabstop=2 cindent syntax=lua
|
||||
|
||||
@@ -40,101 +40,19 @@ local darktable = require "darktable"
|
||||
local du = require "lib/dtutils"
|
||||
local filelib = require "lib/dtutils.file"
|
||||
|
||||
-- Forward declare the functions
|
||||
local autostyle_apply_one_image,autostyle_apply_one_image_event,autostyle_apply,exiftool_attribute,capture
|
||||
local CURR_API_STRING = darktable.configuration.api_version_string
|
||||
du.check_min_api_version("7.0.0", "autostyle")
|
||||
|
||||
-- Tested it with darktable 1.6.1 and darktable git from 2014-01-25
|
||||
du.check_min_api_version("2.0.2", "autostyle")
|
||||
-- return data structure for script_manager
|
||||
|
||||
-- Receive the event triggered
|
||||
function autostyle_apply_one_image_event(event,image)
|
||||
autostyle_apply_one_image(image)
|
||||
end
|
||||
local script_data = {}
|
||||
|
||||
-- Apply the style to an image, if it matches the tag condition
|
||||
function autostyle_apply_one_image (image)
|
||||
-- We need the tag, the value and the style_name provided from the configuration string
|
||||
local tag,value,style_name=string.match(darktable.preferences.read("autostyle","exif_tag","string"),"(%g+)%s*=%s*(%g+)%s*=>%s*(%g+)")
|
||||
|
||||
-- check they all exist (correct syntax)
|
||||
if (not tag) then
|
||||
darktable.print("EXIF TAG not found in " .. darktable.preferences.read("autostyle","exif_tag","string"))
|
||||
return 0
|
||||
end
|
||||
if (not value) then
|
||||
darktable.print("value to match not found in " .. darktable.preferences.read("autostyle","exif_tag","string"))
|
||||
return 0
|
||||
end
|
||||
if (not style_name) then
|
||||
darktable.print("style name not found in " .. darktable.preferences.read("autostyle","exif_tag","string"))
|
||||
return 0
|
||||
end
|
||||
if not filelib.check_if_bin_exists("exiftool") then
|
||||
darktable.print("Can't find exiftool")
|
||||
return 0
|
||||
end
|
||||
|
||||
|
||||
-- First find the style (we have its name)
|
||||
local styles= darktable.styles
|
||||
local style
|
||||
for _,s in ipairs(styles) do
|
||||
if s.name == style_name then
|
||||
style=s
|
||||
end
|
||||
end
|
||||
if (not style) then
|
||||
darktable.print("style not found for autostyle: " .. style_name)
|
||||
return 0
|
||||
end
|
||||
|
||||
-- Apply the style to image, if it is tagged
|
||||
local ok,auto_dr_attr= pcall(exiftool_attribute,image.path .. '/' .. image.filename,tag)
|
||||
--darktable.print_error("dr_attr:" .. auto_dr_attr)
|
||||
-- If the lookup fails, stop here
|
||||
if (not ok) then
|
||||
darktable.print("Couldn't get attribute " .. auto_dr_attr .. " from exiftool's output")
|
||||
return 0
|
||||
end
|
||||
if auto_dr_attr==value then
|
||||
darktable.print_log("Image " .. image.filename .. ": autostyle automatically applied " .. darktable.preferences.read("autostyle","exif_tag","string") )
|
||||
darktable.styles.apply(style,image)
|
||||
return 1
|
||||
else
|
||||
darktable.print_log("Image " .. image.filename .. ": autostyle not applied, exif tag " .. darktable.preferences.read("autostyle","exif_tag","string") .. " not matched: " .. auto_dr_attr)
|
||||
return 0
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
function autostyle_apply( shortcut)
|
||||
local images = darktable.gui.action_images
|
||||
local images_processed =0
|
||||
local images_submitted =0
|
||||
for _,image in pairs(images) do
|
||||
images_submitted = images_submitted +1
|
||||
images_processed = images_processed + autostyle_apply_one_image(image)
|
||||
end
|
||||
darktable.print("Applied auto style to " .. images_processed .. " out of " .. images_submitted .. " image(s)")
|
||||
end
|
||||
|
||||
-- Retrieve the attribute through exiftool
|
||||
function exiftool_attribute(path,attr)
|
||||
local cmd="exiftool -" .. attr .. " '" .. path .. "'";
|
||||
local exifresult=get_stdout(cmd)
|
||||
local attribute=string.match(exifresult,": (.*)")
|
||||
if (attribute == nil) then
|
||||
darktable.print_error( "Could not find the attribute " .. attr .. " using the command: <" .. cmd .. ">")
|
||||
-- Raise an error to the caller
|
||||
error( "Could not find the attribute " .. attr .. " using the command: <" .. cmd .. ">");
|
||||
end
|
||||
-- darktable.print_error("Returning attribute: " .. attribute)
|
||||
return attribute
|
||||
end
|
||||
script_data.destroy = nil -- function to destory the script
|
||||
script_data.destroy_method = nil -- set to hide for libs since we can't destroy them commpletely yet, otherwise leave as nil
|
||||
script_data.restart = nil -- how to restart the (lib) script after it's been hidden - i.e. make it visible again
|
||||
script_data.show = nil -- only required for libs since the destroy_method only hides them
|
||||
|
||||
-- run command and retrieve stdout
|
||||
function get_stdout(cmd)
|
||||
local function get_stdout(cmd)
|
||||
-- Open the command, for reading
|
||||
local fd = assert(io.popen(cmd, 'r'))
|
||||
darktable.control.read(fd)
|
||||
@@ -151,13 +69,108 @@ function get_stdout(cmd)
|
||||
return data
|
||||
end
|
||||
|
||||
-- Retrieve the attribute through exiftool
|
||||
local function exiftool_attribute(path, attr)
|
||||
local cmd = "exiftool -" .. attr .. " '" .. path .. "'";
|
||||
local exifresult = get_stdout(cmd)
|
||||
local attribute = string.match(exifresult, ": (.*)")
|
||||
if (attribute == nil) then
|
||||
darktable.print_error( "Could not find the attribute " .. attr .. " using the command: <" .. cmd .. ">")
|
||||
-- Raise an error to the caller
|
||||
error( "Could not find the attribute " .. attr .. " using the command: <" .. cmd .. ">");
|
||||
end
|
||||
-- darktable.print_error("Returning attribute: " .. attribute)
|
||||
return attribute
|
||||
end
|
||||
|
||||
-- Apply the style to an image, if it matches the tag condition
|
||||
local function autostyle_apply_one_image (image)
|
||||
|
||||
local pref = darktable.preferences.read("autostyle", "exif_tag", "string")
|
||||
-- We need the tag, the value and the style_name provided from the configuration string
|
||||
local tag, value, style_name = string.match(pref, "(%g+)%s*=%s*(%g+)%s*=>%s*(%g+)")
|
||||
|
||||
-- check they all exist (correct syntax)
|
||||
if (not tag) then
|
||||
darktable.print("EXIF TAG not found in " .. pref)
|
||||
return 0
|
||||
end
|
||||
if (not value) then
|
||||
darktable.print("value to match not found in " .. pref)
|
||||
return 0
|
||||
end
|
||||
if (not style_name) then
|
||||
darktable.print("style name not found in " .. pref)
|
||||
return 0
|
||||
end
|
||||
if not filelib.check_if_bin_exists("exiftool") then
|
||||
darktable.print("Can't find exiftool")
|
||||
return 0
|
||||
end
|
||||
|
||||
|
||||
-- First find the style (we have its name)
|
||||
local styles = darktable.styles
|
||||
local style
|
||||
for _, s in ipairs(styles) do
|
||||
if s.name == style_name then
|
||||
style = s
|
||||
end
|
||||
end
|
||||
if (not style) then
|
||||
darktable.print("style not found for autostyle: " .. style_name)
|
||||
return 0
|
||||
end
|
||||
|
||||
-- Apply the style to image, if it is tagged
|
||||
local ok, auto_dr_attr = pcall(exiftool_attribute, image.path .. '/' .. image.filename,tag)
|
||||
--darktable.print_error("dr_attr:" .. auto_dr_attr)
|
||||
-- If the lookup fails, stop here
|
||||
if (not ok) then
|
||||
darktable.print("Couldn't get attribute " .. auto_dr_attr .. " from exiftool's output")
|
||||
return 0
|
||||
end
|
||||
if auto_dr_attr == value then
|
||||
darktable.print_log("Image " .. image.filename .. ": autostyle automatically applied " .. pref)
|
||||
darktable.styles.apply(style,image)
|
||||
return 1
|
||||
else
|
||||
darktable.print_log("Image " .. image.filename .. ": autostyle not applied, exif tag " .. pref .. " not matched: " .. auto_dr_attr)
|
||||
return 0
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
-- Receive the event triggered
|
||||
local function autostyle_apply_one_image_event(event,image)
|
||||
autostyle_apply_one_image(image)
|
||||
end
|
||||
|
||||
local function autostyle_apply(shortcut)
|
||||
local images = darktable.gui.action_images
|
||||
local images_processed = 0
|
||||
local images_submitted = 0
|
||||
for _,image in pairs(images) do
|
||||
images_submitted = images_submitted + 1
|
||||
images_processed = images_processed + autostyle_apply_one_image(image)
|
||||
end
|
||||
darktable.print("Applied auto style to " .. images_processed .. " out of " .. images_submitted .. " image(s)")
|
||||
end
|
||||
|
||||
local function destroy()
|
||||
darktable.destroy_event("autostyle", "shortcut")
|
||||
darktable.destroy_event("autostyle", "post-import-image")
|
||||
end
|
||||
|
||||
-- Registering events
|
||||
darktable.register_event("shortcut", autostyle_apply,
|
||||
darktable.register_event("autostyle", "shortcut", autostyle_apply,
|
||||
"Apply your chosen style from exiftool tags")
|
||||
|
||||
darktable.preferences.register("autostyle","exif_tag","string","Autostyle: EXIF_tag=value=>style","apply a style automatically if an EXIF_tag matches value. Find the tag with exiftool","")
|
||||
darktable.preferences.register("autostyle", "exif_tag", "string", "Autostyle: EXIF_tag=value=>style", "apply a style automatically if an EXIF_tag matches value. Find the tag with exiftool", "")
|
||||
|
||||
darktable.register_event("post-import-image",
|
||||
darktable.register_event("autostyle", "post-import-image",
|
||||
autostyle_apply_one_image_event)
|
||||
|
||||
|
||||
script_data.destroy = destroy
|
||||
return script_data
|
||||
201
contrib/change_group_leader.lua
Normal file
201
contrib/change_group_leader.lua
Normal file
@@ -0,0 +1,201 @@
|
||||
--[[
|
||||
change group leader
|
||||
|
||||
copyright (c) 2020, 2022 Bill Ferguson <wpferguson@gmail.com>
|
||||
copyright (c) 2021 Angel Angelov
|
||||
|
||||
darktable 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.
|
||||
|
||||
darktable 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 darktable. If not, see <http://www.gnu.org/licenses/>.
|
||||
]]
|
||||
|
||||
--[[
|
||||
CHANGE GROUP LEADER
|
||||
automatically change the leader of raw+jpg paired image groups
|
||||
|
||||
INSTALLATION
|
||||
* copy this file in $CONFIGDIR/lua/ where CONFIGDIR is your darktable configuration directory
|
||||
* add the following line in the file $CONFIGDIR/luarc
|
||||
require "change_group_leader"
|
||||
|
||||
USAGE
|
||||
* in lighttable mode, select the image groups you wish to process,
|
||||
select whether you want to set the leader to "jpg" or "raw",
|
||||
and click "Execute"
|
||||
]]
|
||||
|
||||
local dt = require "darktable"
|
||||
local du = require "lib/dtutils"
|
||||
|
||||
local gettext = dt.gettext
|
||||
|
||||
local MODULE = "change_group_leader"
|
||||
|
||||
du.check_min_api_version("3.0.0", MODULE)
|
||||
|
||||
-- return data structure for script_manager
|
||||
|
||||
local script_data = {}
|
||||
|
||||
script_data.destroy = nil -- function to destory the script
|
||||
script_data.destroy_method = nil -- set to hide for libs since we can't destroy them commpletely yet, otherwise leave as nil
|
||||
script_data.restart = nil -- how to restart the (lib) script after it's been hidden - i.e. make it visible again
|
||||
script_data.show = nil -- only required for libs since the destroy_method only hides them
|
||||
|
||||
-- Tell gettext where to find the .mo file translating messages for a particular domain
|
||||
gettext.bindtextdomain(MODULE, dt.configuration.config_dir.."/lua/locale/")
|
||||
|
||||
local function _(msgid)
|
||||
return gettext.dgettext(MODULE, msgid)
|
||||
end
|
||||
|
||||
-- create a namespace to contain persistent data and widgets
|
||||
chg_grp_ldr = {}
|
||||
|
||||
local cgl = chg_grp_ldr
|
||||
|
||||
cgl.widgets = {}
|
||||
|
||||
cgl.event_registered = false
|
||||
cgl.module_installed = false
|
||||
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
-- F U N C T I O N S
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
||||
local function install_module()
|
||||
if not cgl.module_installed then
|
||||
dt.register_lib(
|
||||
MODULE, -- Module name
|
||||
_("change_group_leader"), -- Visible name
|
||||
true, -- expandable
|
||||
false, -- resetable
|
||||
{[dt.gui.views.lighttable] = {"DT_UI_CONTAINER_PANEL_RIGHT_CENTER", 700}}, -- containers
|
||||
cgl.widgets.box,
|
||||
nil,-- view_enter
|
||||
nil -- view_leave
|
||||
)
|
||||
cgl.module_installed = true
|
||||
end
|
||||
end
|
||||
|
||||
local function find_group_leader(images, mode)
|
||||
for _, img in ipairs(images) do
|
||||
dt.print_log("checking image " .. img.id .. " named " .. img.filename)
|
||||
local found = false
|
||||
if mode == "jpg" then
|
||||
if string.match(string.lower(img.filename), "jpg$") then
|
||||
dt.print_log("jpg matched image " .. img.filename)
|
||||
found = true
|
||||
end
|
||||
elseif mode == "raw" then
|
||||
if img.is_raw and img.duplicate_index == 0 then
|
||||
dt.print_log("found raw " .. img.filename)
|
||||
found = true
|
||||
end
|
||||
elseif mode == "non-raw" then
|
||||
if img.is_ldr then
|
||||
dt.print_log("found ldr " .. img.filename)
|
||||
found = true
|
||||
end
|
||||
else
|
||||
dt.print_error(MODULE .. ": unrecognized mode " .. mode)
|
||||
return
|
||||
end
|
||||
if found then
|
||||
dt.print_log("making " .. img.filename .. " group leader")
|
||||
img:make_group_leader()
|
||||
return
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function process_image_groups(images)
|
||||
if #images < 1 then
|
||||
dt.print(_("No images selected."))
|
||||
dt.print_log(MODULE .. "no images seletected, returning...")
|
||||
else
|
||||
local mode = cgl.widgets.mode.value
|
||||
for _,img in ipairs(images) do
|
||||
dt.print_log("checking image " .. img.id)
|
||||
local group_images = img:get_group_members()
|
||||
if group_images == 1 then
|
||||
dt.print_log("only one image in group for image " .. image.id)
|
||||
else
|
||||
find_group_leader(group_images, mode)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
-- S C R I P T M A N A G E R I N T E G R A T I O N
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
||||
local function destroy()
|
||||
dt.gui.libs[MODULE].visible = false
|
||||
end
|
||||
|
||||
local function restart()
|
||||
dt.gui.libs[MODULE].visible = true
|
||||
end
|
||||
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
-- W I D G E T S
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
||||
cgl.widgets.mode = dt.new_widget("combobox"){
|
||||
label = _("select new group leader"),
|
||||
tooltip = _("select type of image to be group leader"),
|
||||
selected = 1,
|
||||
"jpg", "raw", "non-raw",
|
||||
}
|
||||
|
||||
cgl.widgets.execute = dt.new_widget("button"){
|
||||
label = _("Execute"),
|
||||
clicked_callback = function()
|
||||
process_image_groups(dt.gui.action_images)
|
||||
end
|
||||
}
|
||||
|
||||
cgl.widgets.box = dt.new_widget("box"){
|
||||
orientation = "vertical",
|
||||
cgl.widgets.mode,
|
||||
cgl.widgets.execute,
|
||||
}
|
||||
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
-- D A R K T A B L E I N T E G R A T I O N
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
||||
if dt.gui.current_view().id == "lighttable" then
|
||||
install_module()
|
||||
else
|
||||
if not cgl.event_registered then
|
||||
dt.register_event(
|
||||
"view-changed",
|
||||
function(event, old_view, new_view)
|
||||
if new_view.name == "lighttable" and old_view.name == "darkroom" then
|
||||
install_module()
|
||||
end
|
||||
end
|
||||
)
|
||||
cgl.event_registered = true
|
||||
end
|
||||
end
|
||||
|
||||
script_data.destroy = destroy
|
||||
script_data.restart = restart
|
||||
script_data.destroy_method = "hide"
|
||||
script_data.show = restart
|
||||
|
||||
return script_data
|
||||
@@ -39,14 +39,21 @@
|
||||
local dt = require "darktable"
|
||||
local du = require "lib/dtutils"
|
||||
|
||||
-- return data structure for script_manager
|
||||
|
||||
local script_data = {}
|
||||
|
||||
script_data.destroy = nil -- function to destory the script
|
||||
script_data.destroy_method = nil -- set to hide for libs since we can't destroy them commpletely yet
|
||||
script_data.restart = nil -- how to restart the (lib) script after it's been hidden - i.e. make it visible again
|
||||
script_data.show = nil -- only required for libs since the destroy_method only hides them
|
||||
|
||||
local gettext = dt.gettext
|
||||
|
||||
-- not a number
|
||||
local NaN = 0/0
|
||||
|
||||
du.check_min_api_version("3.0.0", "clear_GPS")
|
||||
local CURR_API_STRING = dt.configuration.api_version_string
|
||||
|
||||
du.check_min_api_version("7.0.0", "clear_GPS")
|
||||
|
||||
-- Tell gettext where to find the .mo file translating messages for a particular domain
|
||||
gettext.bindtextdomain("clear_GPS",dt.configuration.config_dir.."/lua/locale/")
|
||||
@@ -64,14 +71,23 @@ local function clear_GPS(images)
|
||||
end
|
||||
end
|
||||
|
||||
local function destroy()
|
||||
dt.destroy_event("clear_GPS", "shortcut")
|
||||
dt.gui.libs.image.destroy_action("clear_GPS")
|
||||
end
|
||||
|
||||
script_data.destroy = destroy
|
||||
|
||||
dt.gui.libs.image.register_action(
|
||||
_("clear GPS data"),
|
||||
"clear_GPS", _("clear GPS data"),
|
||||
function(event, images) clear_GPS(images) end,
|
||||
_("Clear GPS data from selected images")
|
||||
)
|
||||
|
||||
dt.register_event(
|
||||
"shortcut",
|
||||
"clear_GPS", "shortcut",
|
||||
function(event, shortcut) clear_GPS(dt.gui.action_images) end,
|
||||
_("Clear GPS data")
|
||||
)
|
||||
|
||||
return script_data
|
||||
|
||||
372
contrib/color_profile_manager.lua
Normal file
372
contrib/color_profile_manager.lua
Normal file
@@ -0,0 +1,372 @@
|
||||
--[[
|
||||
|
||||
color_profile_manager.lua - manage external darktable color profiles
|
||||
|
||||
Copyright (C) 2021 Bill Ferguson <wpferguson@gmail.com>.
|
||||
|
||||
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/>.
|
||||
]]
|
||||
--[[
|
||||
color_profile_manager - manage external darktable color profiles
|
||||
|
||||
This script provides a tool to manage input and output external color
|
||||
profiles used by darktable. Color profiles can be added or removed
|
||||
to/from the correct directories so that darktable can find and use
|
||||
them.
|
||||
|
||||
ADDITIONAL SOFTWARE NEEDED FOR THIS SCRIPT
|
||||
* None
|
||||
|
||||
USAGE
|
||||
* require this script from your main lua file
|
||||
* select the input or output set of color profiles
|
||||
* a list of profiles is displayed. Click the check box beside the
|
||||
profile name to select it for removal. Click the "remove profile"
|
||||
button to remove the profile.
|
||||
* use the file selector to select a color profile to add to the currently
|
||||
selected set (input or output)
|
||||
* click the "add profile" button to add the profile to the selected set
|
||||
|
||||
BUGS, COMMENTS, SUGGESTIONS
|
||||
* Send to Bill Ferguson, wpferguson@gmail.com or raise an issue on
|
||||
https://github.com/dakrtable-org/lua-scripts
|
||||
]]
|
||||
local dt = require "darktable"
|
||||
local du = require "lib/dtutils"
|
||||
local df = require "lib/dtutils.file"
|
||||
|
||||
du.check_min_api_version("7.0.0", "color_profile_manager")
|
||||
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
-- L O C A L I Z A T I O N
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
||||
local gettext = dt.gettext
|
||||
|
||||
-- Tell gettext where to find the .mo file translating messages for a particular domain
|
||||
gettext.bindtextdomain("color_profile_manager", dt.configuration.config_dir .. "/lua/locale/")
|
||||
|
||||
local function _(msgid)
|
||||
return gettext.dgettext("color_profile_manager", msgid)
|
||||
end
|
||||
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
-- C O N S T A N T S
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
||||
local MODULE_NAME = "color_profile_manager"
|
||||
local PS = dt.configuration.running_os == "windows" and "\\" or "/"
|
||||
local CS = dt.configuration.running_os == "windows" and "&" or ";"
|
||||
local DIR_CMD = dt.configuration.running_os == "windows" and "dir /b" or "ls"
|
||||
local COLOR_IN_DIR = dt.configuration.config_dir .. PS .. "color" .. PS .. "in"
|
||||
local COLOR_OUT_DIR = dt.configuration.config_dir .. PS .. "color" .. PS .. "out"
|
||||
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
-- N A M E S P A C E
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
||||
local cpm = {}
|
||||
cpm.widgets = {}
|
||||
cpm.widgets.profile_box = dt.new_widget("box"){
|
||||
orientation = "vertical",
|
||||
}
|
||||
cpm.module_installed = false
|
||||
cpm.event_registered = false
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
-- F U N C T I O N S
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
||||
local function check_for_directories()
|
||||
if not df.test_file(COLOR_IN_DIR, "d") then
|
||||
dt.print_log("didn't find " .. COLOR_IN_DIR)
|
||||
return false
|
||||
elseif not df.test_file(COLOR_OUT_DIR, "d") then
|
||||
dt.print_log("didn't find " .. COLOR_OUT_DIR)
|
||||
return false
|
||||
else
|
||||
dt.print_log("both directories exist")
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
||||
local function add_directories()
|
||||
df.mkdir(COLOR_IN_DIR)
|
||||
df.mkdir(COLOR_OUT_DIR)
|
||||
end
|
||||
|
||||
local function list_profiles(dir)
|
||||
local files = {}
|
||||
local p = io.popen(DIR_CMD .. " " .. dir)
|
||||
if p then
|
||||
for line in p:lines() do
|
||||
table.insert(files, line)
|
||||
end
|
||||
end
|
||||
p:close()
|
||||
return files
|
||||
end
|
||||
|
||||
local function add_profile(file, dir)
|
||||
df.file_copy(file, dir)
|
||||
dt.print(_("added color profile " .. file .. " to " .. dir))
|
||||
dt.print_log("color profile " .. file .. " added to " .. dir)
|
||||
end
|
||||
|
||||
local function remove_profile(file, dir)
|
||||
os.remove(dir .. PS .. file)
|
||||
dt.print(_("removed color profile " .. file .. " from " .. dir))
|
||||
dt.print_log("color profile " .. file .. " removed from " .. dir)
|
||||
end
|
||||
|
||||
local function clear_profile_box()
|
||||
for i = #cpm.widgets.profile_box, 1, -1 do
|
||||
cpm.widgets.profile_box[i] = nil
|
||||
end
|
||||
end
|
||||
|
||||
local function add_profile_callback()
|
||||
local profile_dir = COLOR_IN_DIR
|
||||
if cpm.widgets.profile_set.selected == 2 then
|
||||
profile_dir = COLOR_OUT_DIR
|
||||
end
|
||||
|
||||
local new_profile = cpm.widgets.profile_selector.value
|
||||
if string.lower(df.get_filetype(new_profile)) ~= "icm" and string.lower(df.get_filetype(new_profile)) ~= "icc" then
|
||||
dt.print(_("ERROR: color profile must be an icc or icm file"))
|
||||
dt.print_error(new_profile .. " selected and isn't an icc or icm file")
|
||||
return
|
||||
end
|
||||
|
||||
-- set selector value to directory that new profile came from
|
||||
-- in case there are more
|
||||
cpm.widgets.profile_selector.value = df.get_path(cpm.widgets.profile_selector.value)
|
||||
add_profile(new_profile, profile_dir)
|
||||
local files = list_profiles(profile_dir)
|
||||
local widgets = {}
|
||||
|
||||
local profile_ptr = 1
|
||||
for i, file in ipairs(files) do
|
||||
if #cpm.widgets.profile_box == 0 or cpm.widgets.profile_box[profile_ptr].label ~= file then
|
||||
table.insert(widgets, dt.new_widget("check_button"){value = false, label = file})
|
||||
else
|
||||
table.insert(widgets, cpm.widgets.profile_box[profile_ptr])
|
||||
profile_ptr = profile_ptr + 1
|
||||
if profile_ptr > #cpm.widgets.profile_box then
|
||||
profile_ptr = #cpm.widgets.profile_box
|
||||
end
|
||||
end
|
||||
end
|
||||
clear_profile_box()
|
||||
for _, widget in ipairs(widgets) do
|
||||
table.insert(cpm.widgets.profile_box, widget)
|
||||
end
|
||||
if not cpm.widgets.remove_box.visible then
|
||||
cpm.widgets.remove_box.visible = true
|
||||
end
|
||||
end
|
||||
|
||||
local function remove_profile_callback()
|
||||
local widgets_to_keep = {}
|
||||
local profile_dir = COLOR_IN_DIR
|
||||
if cpm.widgets.profile_set.selected == 2 then
|
||||
profile_dir = COLOR_OUT_DIR
|
||||
end
|
||||
|
||||
for _, widget in ipairs(cpm.widgets.profile_box) do
|
||||
if widget.value == true then
|
||||
remove_profile(widget.label, profile_dir)
|
||||
else
|
||||
table.insert(widgets_to_keep, widget)
|
||||
end
|
||||
end
|
||||
clear_profile_box()
|
||||
for _, widget in ipairs(widgets_to_keep) do
|
||||
table.insert(cpm.widgets.profile_box, widget)
|
||||
end
|
||||
if #cpm.widgets.profile_box == 0 then
|
||||
cpm.widgets.remove_box.visible = false
|
||||
else
|
||||
cpm.widgets.remove_box.visible = true
|
||||
end
|
||||
end
|
||||
|
||||
local function list_profile_callback(choice)
|
||||
local list_dir = COLOR_IN_DIR
|
||||
if choice == 2 then
|
||||
list_dir = COLOR_OUT_DIR
|
||||
end
|
||||
|
||||
local files = list_profiles(list_dir)
|
||||
|
||||
if #files == 0 then
|
||||
cpm.widgets.remove_box.visible = false
|
||||
else
|
||||
cpm.widgets.remove_box.visible = true
|
||||
end
|
||||
|
||||
clear_profile_box()
|
||||
|
||||
for i, file in ipairs(files) do
|
||||
cpm.widgets.profile_box[i] = dt.new_widget("check_button"){value = false, label = file}
|
||||
end
|
||||
end
|
||||
|
||||
local function install_module()
|
||||
if not cpm.module_installed then
|
||||
dt.register_lib(
|
||||
MODULE_NAME, -- Module name
|
||||
_("color profile manager"), -- Visible name
|
||||
true, -- expandable
|
||||
false, -- resetable
|
||||
{[dt.gui.views.lighttable] = {"DT_UI_CONTAINER_PANEL_LEFT_CENTER", 0}}, -- containers
|
||||
cpm.widgets.main_widget,
|
||||
nil,-- view_enter
|
||||
nil -- view_leave
|
||||
)
|
||||
cpm.module_installed = true
|
||||
dt.control.sleep(500)
|
||||
if not cpm.initialized then
|
||||
cpm.widgets.profile_set.visible = false
|
||||
cpm.widgets.add_box.visible = false
|
||||
cpm.widgets.remove_box.visible = false
|
||||
else
|
||||
cpm.widgets.profile_set.selected = 1
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function destroy()
|
||||
dt.gui.libs[MODULE_NAME].visible = false
|
||||
return
|
||||
end
|
||||
|
||||
local function restart()
|
||||
dt.gui.libs[MODULE_NAME].visible = true
|
||||
return
|
||||
end
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
-- W I D G E T S
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
||||
cpm.initialized = check_for_directories()
|
||||
dt.print_log("cpm.initialized is " .. tostring(cpm.initialized))
|
||||
|
||||
if not cpm.initialized then
|
||||
dt.print_log("creating init_box")
|
||||
cpm.widgets.init_box = dt.new_widget("box"){
|
||||
orientation = "vertical",
|
||||
dt.new_widget("button"){
|
||||
label = _("initialize color profiles"),
|
||||
tooltip = _("create the directory structure to contain the color profiles"),
|
||||
clicked_callback = function(this)
|
||||
add_directories()
|
||||
cpm.initialized = true
|
||||
cpm.widgets.profile_set.visible = true
|
||||
cpm.widgets.add_box.visible = true
|
||||
cpm.widgets.remove_box.visible = false
|
||||
cpm.widgets.init_box.visible = false
|
||||
cpm.widgets.profile_set.selected = 1
|
||||
end
|
||||
}
|
||||
}
|
||||
end
|
||||
|
||||
cpm.widgets.profile_set = dt.new_widget("combobox"){
|
||||
label = _("select profile set"),
|
||||
tooltip = _("select input or output profiles"),
|
||||
visible = cpm.initialized and false or true,
|
||||
changed_callback = function(this)
|
||||
if cpm.initialized then
|
||||
list_profile_callback(this.selected)
|
||||
end
|
||||
end,
|
||||
_("input"), _("output"),
|
||||
}
|
||||
|
||||
cpm.widgets.profile_selector = dt.new_widget("file_chooser_button"){
|
||||
title = _("select color profile to add"),
|
||||
tooltip = _("select the .icc or .icm file to add"),
|
||||
is_directory = false
|
||||
}
|
||||
|
||||
cpm.widgets.add_box = dt.new_widget("box"){
|
||||
orientation = "vertical",
|
||||
visible = cpm.initialized and true or false,
|
||||
dt.new_widget("section_label"){label = _("add profile")},
|
||||
cpm.widgets.profile_selector,
|
||||
dt.new_widget("button"){
|
||||
label = _("add selected color profile"),
|
||||
tooltip = _("add selected file to profiles"),
|
||||
clicked_callback = function(this)
|
||||
add_profile_callback()
|
||||
end
|
||||
}
|
||||
}
|
||||
|
||||
cpm.widgets.remove_box = dt.new_widget("box"){
|
||||
orientation = "vertical",
|
||||
visible = cpm.initialized and true or false,
|
||||
dt.new_widget("section_label"){label = _("remove profile")},
|
||||
cpm.widgets.profile_box,
|
||||
dt.new_widget("button"){
|
||||
label = _("remove selected profile(s)"),
|
||||
tooltip = _("remove the checked profile(s)"),
|
||||
clicked_callback = function(this)
|
||||
remove_profile_callback()
|
||||
end
|
||||
}
|
||||
}
|
||||
|
||||
local main_widgets = {}
|
||||
|
||||
if not cpm.initialized then
|
||||
table.insert(main_widgets, cpm.widgets.init_box)
|
||||
end
|
||||
table.insert(main_widgets, cpm.widgets.profile_set)
|
||||
table.insert(main_widgets, cpm.widgets.remove_box)
|
||||
table.insert(main_widgets, cpm.widgets.add_box)
|
||||
|
||||
cpm.widgets.main_widget = dt.new_widget("box"){
|
||||
orientation = "vertical",
|
||||
table.unpack(main_widgets)
|
||||
}
|
||||
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
-- M A I N
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
||||
if dt.gui.current_view().id == "lighttable" then
|
||||
install_module()
|
||||
else
|
||||
if not cpm.event_registered then
|
||||
dt.register_event(
|
||||
MODULE_NAME, "view-changed",
|
||||
function(event, old_view, new_view)
|
||||
if new_view.name == "lighttable" and old_view.name == "darkroom" then
|
||||
install_module()
|
||||
end
|
||||
end
|
||||
)
|
||||
cpm.event_registered = true
|
||||
end
|
||||
end
|
||||
|
||||
local script_data = {}
|
||||
|
||||
script_data.destroy = destroy
|
||||
script_data.restart = restart
|
||||
script_data.destroy_method = "hide"
|
||||
script_data.show = restart
|
||||
|
||||
return script_data
|
||||
@@ -42,8 +42,16 @@ local debug = require "darktable.debug"
|
||||
|
||||
local gettext = dt.gettext
|
||||
|
||||
du.check_min_api_version("3.0.0", "copy_attach_detach_tags")
|
||||
local CURR_API_STRING = dt.configuration.api_version_string
|
||||
du.check_min_api_version("7.0.0", "copy_attach_detach_tags")
|
||||
|
||||
-- return data structure for script_manager
|
||||
|
||||
local script_data = {}
|
||||
|
||||
script_data.destroy = nil -- function to destory the script
|
||||
script_data.destroy_method = nil -- set to hide for libs since we can't destroy them commpletely yet, otherwise leave as nil
|
||||
script_data.restart = nil -- how to restart the (lib) script after it's been hidden - i.e. make it visible again
|
||||
script_data.show = nil -- only required for libs since the destroy_method only hides them
|
||||
|
||||
-- Tell gettext where to find the .mo file translating messages for a particular domain
|
||||
gettext.bindtextdomain("copy_attach_detach_tags",dt.configuration.config_dir.."/lua/locale/")
|
||||
@@ -182,6 +190,41 @@ local function install_module()
|
||||
end
|
||||
end
|
||||
|
||||
local function destroy()
|
||||
dt.destroy_event("cadt_ct", "shortcut")
|
||||
dt.destroy_event("cadt_at", "shortcut")
|
||||
dt.destroy_event("cadt_dt", "shortcut")
|
||||
dt.destroy_event("cadt_rt", "shortcut")
|
||||
dt.gui.libs["tagging_addon"].visible = false
|
||||
end
|
||||
|
||||
local function restart()
|
||||
-- shortcut for copy
|
||||
dt.register_event("cadt_ct", "shortcut",
|
||||
mcopy_tags,
|
||||
_('copy tags from selected image(s)'))
|
||||
|
||||
-- shortcut for attach
|
||||
dt.register_event("cadt_at", "shortcut",
|
||||
attach_tags,
|
||||
_('paste tags to selected image(s)'))
|
||||
|
||||
-- shortcut for detaching tags
|
||||
dt.register_event("cadt_dt", "shortcut",
|
||||
detach_tags,
|
||||
_('remove tags from selected image(s)'))
|
||||
|
||||
-- shortcut for replace tags
|
||||
dt.register_event("cadt_rt", "shortcut",
|
||||
replace_tags,
|
||||
_('replace tags from selected image(s)'))
|
||||
dt.gui.libs["tagging_addon"].visible = true
|
||||
end
|
||||
|
||||
local function show()
|
||||
dt.gui.libs["tagging_addon"].visible = true
|
||||
end
|
||||
|
||||
-- create modul Tagging addons
|
||||
taglist_label.reset_callback = mcopy_tags
|
||||
|
||||
@@ -234,7 +277,7 @@ if dt.gui.current_view().id == "lighttable" then
|
||||
else
|
||||
if not cadt.event_registered then
|
||||
dt.register_event(
|
||||
"view-changed",
|
||||
"cadt", "view-changed",
|
||||
function(event, old_view, new_view)
|
||||
if new_view.name == "lighttable" and old_view.name == "darkroom" then
|
||||
install_module()
|
||||
@@ -247,24 +290,30 @@ end
|
||||
|
||||
|
||||
-- shortcut for copy
|
||||
dt.register_event("shortcut",
|
||||
dt.register_event("cadt_ct", "shortcut",
|
||||
mcopy_tags,
|
||||
_('copy tags from selected image(s)'))
|
||||
|
||||
-- shortcut for attach
|
||||
dt.register_event("shortcut",
|
||||
dt.register_event("cadt_at", "shortcut",
|
||||
attach_tags,
|
||||
_('paste tags to selected image(s)'))
|
||||
|
||||
-- shortcut for detaching tags
|
||||
dt.register_event("shortcut",
|
||||
dt.register_event("cadt_dt", "shortcut",
|
||||
detach_tags,
|
||||
_('remove tags from selected image(s)'))
|
||||
|
||||
-- shortcut for replace tags
|
||||
dt.register_event("shortcut",
|
||||
dt.register_event("cadt_rt", "shortcut",
|
||||
replace_tags,
|
||||
_('replace tags from selected image(s)'))
|
||||
|
||||
script_data.destroy = destroy
|
||||
script_data.restart = restart
|
||||
script_data.destroy_method = "hide"
|
||||
script_data.show = show
|
||||
|
||||
return script_data
|
||||
-- vim: shiftwidth=2 expandtab tabstop=2 cindent syntax=lua
|
||||
-- kate: tab-indents: off; indent-width 2; replace-tabs on; remove-trailing-space on;
|
||||
|
||||
@@ -35,9 +35,16 @@ USAGE
|
||||
local darktable = require "darktable"
|
||||
local du = require "lib/dtutils"
|
||||
|
||||
-- Tested with darktable 2.0.1
|
||||
du.check_min_api_version("2.0.0", "cr2hdr")
|
||||
local CURR_API_STRING = darktable.configuration.api_version_string
|
||||
du.check_min_api_version("7.0.0", "cr2hdr")
|
||||
|
||||
-- return data structure for script_manager
|
||||
|
||||
local script_data = {}
|
||||
|
||||
script_data.destroy = nil -- function to destory the script
|
||||
script_data.destroy_method = nil -- set to hide for libs since we can't destroy them commpletely yet, otherwise leave as nil
|
||||
script_data.restart = nil -- how to restart the (lib) script after it's been hidden - i.e. make it visible again
|
||||
script_data.show = nil -- only required for libs since the destroy_method only hides them
|
||||
|
||||
local queue = {}
|
||||
local processed_files = {}
|
||||
@@ -108,11 +115,21 @@ local function convert_action_images(shortcut)
|
||||
convert_images()
|
||||
end
|
||||
|
||||
darktable.register_event("shortcut",
|
||||
local function destroy()
|
||||
darktable.destroy_event("cr2hdr", "shortcut")
|
||||
darktable.destroy_event("cr2hdr", "post-import-image")
|
||||
darktable.destroy_event("cr2hdr", "post-import-film")
|
||||
end
|
||||
|
||||
darktable.register_event("cr2hdr", "shortcut",
|
||||
convert_action_images, "Run cr2hdr (Magic Lantern DualISO converter) on selected images")
|
||||
darktable.register_event("post-import-image",
|
||||
darktable.register_event("cr2hdr", "post-import-image",
|
||||
file_imported)
|
||||
darktable.register_event("post-import-film",
|
||||
darktable.register_event("cr2hdr", "post-import-film",
|
||||
film_imported)
|
||||
|
||||
darktable.preferences.register("cr2hdr", "onimport", "bool", "Invoke on import", "If true then cr2hdr will try to proccess every file during importing. Warning: cr2hdr is quite slow even in figuring out on whether the file is Dual ISO or not.", false)
|
||||
|
||||
script_data.destroy = destroy
|
||||
|
||||
return script_data
|
||||
|
||||
158
contrib/cycle_group_leader.lua
Normal file
158
contrib/cycle_group_leader.lua
Normal file
@@ -0,0 +1,158 @@
|
||||
--[[
|
||||
|
||||
cycle_group_leader.lua - change image grouip leader
|
||||
|
||||
Copyright (C) 2024 Bill Ferguson <wpferguson@gmail.com>
|
||||
|
||||
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/>.
|
||||
]]
|
||||
--[[
|
||||
cycle_group_leader - change image grouip leader
|
||||
|
||||
cycle_group_leader changes the group leader to the next
|
||||
image in the group. If the end of the group is reached
|
||||
then the next image is wrapped around to the first image.
|
||||
|
||||
ADDITIONAL SOFTWARE NEEDED FOR THIS SCRIPT
|
||||
None
|
||||
|
||||
USAGE
|
||||
* enable with script_manager
|
||||
* assign a key to the shortcut
|
||||
|
||||
BUGS, COMMENTS, SUGGESTIONS
|
||||
Bill Ferguson <wpferguson@gmail.com>
|
||||
|
||||
CHANGES
|
||||
]]
|
||||
|
||||
local dt = require "darktable"
|
||||
local du = require "lib/dtutils"
|
||||
local df = require "lib/dtutils.file"
|
||||
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
-- C O N S T A N T S
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
||||
local MODULE = "cycle_group_leader"
|
||||
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
-- A P I C H E C K
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
||||
du.check_min_api_version("7.0.0", MODULE)
|
||||
|
||||
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
-- S C R I P T M A N A G E R I N T E G R A T I O N
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
||||
local script_data = {}
|
||||
|
||||
script_data.destroy = nil -- function to destory the script
|
||||
script_data.destroy_method = nil -- set to hide for libs since we can't destroy them commpletely yet
|
||||
script_data.restart = nil -- how to restart the (lib) script after it's been hidden - i.e. make it visible again
|
||||
script_data.show = nil -- only required for libs since the destroy_method only hides them
|
||||
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
-- I 1 8 N
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
||||
local gettext = dt.gettext
|
||||
|
||||
-- Tell gettext where to find the .mo file translating messages for a particular domain
|
||||
gettext.bindtextdomain(MODULE, dt.configuration.config_dir .. "/lua/locale/")
|
||||
|
||||
local function _(msgid)
|
||||
return gettext.dgettext(MODULE, msgid)
|
||||
end
|
||||
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
-- F U N C T I O N S
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
||||
local function toggle_global_toolbox_grouping()
|
||||
dt.gui.libs.global_toolbox.grouping = false
|
||||
dt.gui.libs.global_toolbox.grouping = true
|
||||
end
|
||||
|
||||
local function hinter_msg(msg)
|
||||
dt.print_hinter(msg)
|
||||
dt.control.sleep(1500)
|
||||
dt.print_hinter(" ")
|
||||
end
|
||||
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
-- M A I N P R O G R A M
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
||||
local function cycle_group_leader(image)
|
||||
local group_images = image:get_group_members()
|
||||
if #group_images < 2 then
|
||||
hinter_msg(_("No images to cycle to in group"))
|
||||
return
|
||||
else
|
||||
local position = nil
|
||||
for i, img in ipairs(group_images) do
|
||||
if image == img then
|
||||
position = i
|
||||
end
|
||||
end
|
||||
|
||||
if position == #group_images then
|
||||
position = 1
|
||||
else
|
||||
position = position + 1
|
||||
end
|
||||
|
||||
new_leader = group_images[position]
|
||||
new_leader:make_group_leader()
|
||||
dt.gui.selection({new_leader})
|
||||
|
||||
if dt.gui.libs.global_toolbox.grouping then
|
||||
-- toggle the grouping to make the new leader show
|
||||
toggle_global_toolbox_grouping()
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
-- D A R K T A B L E I N T E G R A T I O N
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
||||
local function destroy()
|
||||
-- put things to destroy (events, storages, etc) here
|
||||
dt.destroy_event(MODULE, "shortcut")
|
||||
end
|
||||
|
||||
script_data.destroy = destroy
|
||||
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
-- E V E N T S
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
||||
dt.register_event(MODULE, "shortcut",
|
||||
function(event, shortcut)
|
||||
-- ignore the film roll, it contains all the images, not just the imported
|
||||
local images = dt.gui.selection()
|
||||
if #images < 1 then
|
||||
dt.print(_("No image selected. Please select an image and try again"))
|
||||
else
|
||||
cycle_group_leader(images[1])
|
||||
end
|
||||
end,
|
||||
_("cycle group leader")
|
||||
)
|
||||
|
||||
return script_data
|
||||
314
contrib/dbmaint.lua
Normal file
314
contrib/dbmaint.lua
Normal file
@@ -0,0 +1,314 @@
|
||||
--[[
|
||||
|
||||
dbmaint.lua - perform database maintenance
|
||||
|
||||
Copyright (C) 2024 Bill Ferguson <wpferguson.com>.
|
||||
|
||||
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/>.
|
||||
]]
|
||||
--[[
|
||||
dbmaint - perform database maintenance
|
||||
|
||||
Perform database maintenance to clean up missing images and filmstrips.
|
||||
|
||||
ADDITIONAL SOFTWARE NEEDED FOR THIS SCRIPT
|
||||
None
|
||||
|
||||
USAGE
|
||||
* start dbmaint from script_manager
|
||||
* scan for missing film rolls or missing images
|
||||
* look at the results and choose to delete or not
|
||||
|
||||
BUGS, COMMENTS, SUGGESTIONS
|
||||
Bill Ferguson <wpferguson.com>
|
||||
|
||||
CHANGES
|
||||
]]
|
||||
|
||||
local dt = require "darktable"
|
||||
local du = require "lib/dtutils"
|
||||
local df = require "lib/dtutils.file"
|
||||
local log = require "lib/dtutils.log"
|
||||
|
||||
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
-- C O N S T A N T S
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
||||
local MODULE <const> = "dbmaint"
|
||||
local DEFAULT_LOG_LEVEL <const> = log.error
|
||||
local PS <const> = dt.configuration.running_os == "windows" and "\\" or "/"
|
||||
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
-- A P I C H E C K
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
||||
du.check_min_api_version("7.0.0", MODULE) -- choose the minimum version that contains the features you need
|
||||
|
||||
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
-- I 1 8 N
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
||||
local gettext = dt.gettext.gettext
|
||||
|
||||
dt.gettext.bindtextdomain(MODULE , dt.configuration.config_dir .. "/lua/locale/")
|
||||
|
||||
local function _(msgid)
|
||||
return gettext(MODULE, msgid)
|
||||
end
|
||||
|
||||
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
-- S C R I P T M A N A G E R I N T E G R A T I O N
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
||||
local script_data = {}
|
||||
|
||||
script_data.destroy = nil -- function to destory the script
|
||||
script_data.destroy_method = nil -- set to hide for libs since we can't destroy them commpletely yet
|
||||
script_data.restart = nil -- how to restart the (lib) script after it's been hidden - i.e. make it visible again
|
||||
script_data.show = nil -- only required for libs since the destroy_method only hides them
|
||||
|
||||
script_data.metadata = {
|
||||
name = "dbmaint",
|
||||
purpose = _("perform database maintenance"),
|
||||
author = "Bill Ferguson <wpferguson.com>",
|
||||
help = "https://docs.darktable.org/lua/stable/lua.scripts.manual/scripts/contrib/dbmaint/"
|
||||
}
|
||||
|
||||
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
-- L O G L E V E L
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
||||
log.log_level(DEFAULT_LOG_LEVEL)
|
||||
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
-- N A M E S P A C E
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
||||
local dbmaint = {}
|
||||
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
-- G L O B A L V A R I A B L E S
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
||||
dbmaint.main_widget = nil
|
||||
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
-- A L I A S E S
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
||||
local namespace = dbmaint
|
||||
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
-- F U N C T I O N S
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
||||
local function scan_film_rolls()
|
||||
local missing_films = {}
|
||||
|
||||
for _, filmroll in ipairs(dt.films) do
|
||||
if not df.check_if_file_exists(filmroll.path) then
|
||||
table.insert(missing_films, filmroll)
|
||||
end
|
||||
end
|
||||
|
||||
return missing_films
|
||||
end
|
||||
|
||||
local function scan_images(film)
|
||||
local missing_images = {}
|
||||
|
||||
if film then
|
||||
for i = 1, #film do
|
||||
local image = film[i]
|
||||
log.log_msg(log.debug, "checking " .. image.filename)
|
||||
if not df.check_if_file_exists(image.path .. PS .. image.filename) then
|
||||
log.log_msg(log.info, image.filename .. " not found")
|
||||
table.insert(missing_images, image)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return missing_images
|
||||
end
|
||||
|
||||
local function remove_missing_film_rolls(list)
|
||||
for _, filmroll in ipairs(list) do
|
||||
filmroll:delete(true)
|
||||
end
|
||||
end
|
||||
|
||||
-- force the lighttable to reload
|
||||
|
||||
local function refresh_lighttable(film)
|
||||
local rules = dt.gui.libs.collect.filter()
|
||||
dt.gui.libs.collect.filter(rules)
|
||||
end
|
||||
|
||||
local function remove_missing_images(list)
|
||||
local film = list[1].film
|
||||
for _, image in ipairs(list) do
|
||||
image:delete()
|
||||
end
|
||||
refresh_lighttable(film)
|
||||
end
|
||||
|
||||
local function install_module()
|
||||
if not namespace.module_installed then
|
||||
dt.register_lib(
|
||||
MODULE, -- Module name
|
||||
_("DB maintenance"), -- Visible name
|
||||
true, -- expandable
|
||||
true, -- resetable
|
||||
{[dt.gui.views.lighttable] = {"DT_UI_CONTAINER_PANEL_LEFT_CENTER", 0}}, -- containers
|
||||
namespace.main_widget,
|
||||
nil,-- view_enter
|
||||
nil -- view_leave
|
||||
)
|
||||
namespace.module_installed = true
|
||||
end
|
||||
end
|
||||
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
-- U S E R I N T E R F A C E
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
||||
dbmaint.list_widget = dt.new_widget("text_view"){
|
||||
editable = false,
|
||||
reset_callback = function(this)
|
||||
this.text = ""
|
||||
end
|
||||
}
|
||||
|
||||
dbmaint.chooser = dt.new_widget("combobox"){
|
||||
label = "scan for",
|
||||
selected = 1,
|
||||
"film rolls", "images",
|
||||
reset_callback = function(this)
|
||||
this.selected = 1
|
||||
end
|
||||
}
|
||||
|
||||
dbmaint.scan_button = dt.new_widget("button"){
|
||||
label = "scan",
|
||||
tooltip = "click to scan for missing film rolls/files",
|
||||
clicked_callback = function(this)
|
||||
local found = nil
|
||||
local found_text = ""
|
||||
if dbmaint.chooser.value == "film rolls" then
|
||||
found = scan_film_rolls()
|
||||
if #found > 0 then
|
||||
for _, film in ipairs(found) do
|
||||
local dir_name = du.split(film.path, PS)
|
||||
found_text = found_text .. dir_name[#dir_name] .. "\n"
|
||||
end
|
||||
end
|
||||
else
|
||||
log.log_msg(log.debug, "checking path " .. dt.collection[1].path .. " for missing files")
|
||||
found = scan_images(dt.collection[1].film)
|
||||
if #found > 0 then
|
||||
for _, image in ipairs(found) do
|
||||
found_text = found_text .. image.filename .. "\n"
|
||||
end
|
||||
end
|
||||
end
|
||||
if #found > 0 then
|
||||
dbmaint.list_widget.text = found_text
|
||||
dbmaint.found = found
|
||||
dbmaint.remove_button.sensitive = true
|
||||
end
|
||||
end,
|
||||
reset_callback = function(this)
|
||||
dbmaint.found = nil
|
||||
end
|
||||
}
|
||||
|
||||
dbmaint.remove_button = dt.new_widget("button"){
|
||||
label = "remove",
|
||||
tooltip = "remove missing film rolls/images",
|
||||
sensitive = false,
|
||||
clicked_callback = function(this)
|
||||
if dbmaint.chooser.value == "film rolls" then
|
||||
remove_missing_film_rolls(dbmaint.found)
|
||||
else
|
||||
remove_missing_images(dbmaint.found)
|
||||
end
|
||||
dbmaint.found = nil
|
||||
dbmaint.list_widget.text = ""
|
||||
this.sensitive = false
|
||||
end,
|
||||
reset_callback = function(this)
|
||||
this.sensitive = false
|
||||
end
|
||||
}
|
||||
|
||||
dbmaint.main_widget = dt.new_widget("box"){
|
||||
orientation = "vertical",
|
||||
dt.new_widget("section_label"){label = "missing items"},
|
||||
dbmaint.list_widget,
|
||||
dt.new_widget("label"){label = ""},
|
||||
dbmaint.chooser,
|
||||
dt.new_widget("label"){label = ""},
|
||||
dbmaint.scan_button,
|
||||
dbmaint.remove_button
|
||||
}
|
||||
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
-- D A R K T A B L E I N T E G R A T I O N
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
||||
local function destroy()
|
||||
dt.gui.libs[MODULE].visible = false
|
||||
|
||||
if namespace.event_registered then
|
||||
dt.destroy_event(MODULE, "view-changed")
|
||||
end
|
||||
|
||||
return
|
||||
end
|
||||
|
||||
local function restart()
|
||||
dt.gui.libs[MODULE].visible = true
|
||||
|
||||
return
|
||||
end
|
||||
|
||||
script_data.destroy = destroy
|
||||
script_data.restart = restart
|
||||
script_data.destroy_method = "hide"
|
||||
script_data.show = restart
|
||||
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
-- E V E N T S
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
||||
if dt.gui.current_view().id == "lighttable" then
|
||||
install_module()
|
||||
else
|
||||
if not namespace.event_registered then
|
||||
dt.register_event(MODULE, "view-changed",
|
||||
function(event, old_view, new_view)
|
||||
if new_view.name == "lighttable" and old_view.name == "darkroom" then
|
||||
install_module()
|
||||
end
|
||||
end
|
||||
)
|
||||
namespace.event_registered = true
|
||||
end
|
||||
end
|
||||
|
||||
return script_data
|
||||
@@ -65,7 +65,16 @@ local mod = 'module_enfuseAdvanced'
|
||||
local os_path_seperator = '/'
|
||||
if dt.configuration.running_os == 'windows' then os_path_seperator = '\\' end
|
||||
|
||||
du.check_min_api_version('5.0.0', 'enfuseAdvanced')
|
||||
du.check_min_api_version("7.0.0", "enfuseAdvanced")
|
||||
|
||||
-- return data structure for script_manager
|
||||
|
||||
local script_data = {}
|
||||
|
||||
script_data.destroy = nil -- function to destory the script
|
||||
script_data.destroy_method = nil -- set to hide for libs since we can't destroy them commpletely yet, otherwise leave as nil
|
||||
script_data.restart = nil -- how to restart the (lib) script after it's been hidden - i.e. make it visible again
|
||||
script_data.show = nil -- only required for libs since the destroy_method only hides them
|
||||
|
||||
-- Tell gettext where to find the .mo file translating messages for a particular domain
|
||||
local gettext = dt.gettext
|
||||
@@ -516,6 +525,10 @@ local function main(storage, image_table, extra_data)
|
||||
dt.print('image fusion process complete')
|
||||
end
|
||||
|
||||
local function destroy()
|
||||
dt.destroy_storage('module_enfuseAdvanced')
|
||||
end
|
||||
|
||||
--GUI--
|
||||
stack_compression = dt.new_widget('stack'){}
|
||||
local label_AIS_options= dt.new_widget('section_label'){
|
||||
@@ -1142,3 +1155,7 @@ else
|
||||
GUI.options_contain.active = 4
|
||||
GUI.show_options.sensitive = false
|
||||
end
|
||||
|
||||
script_data.destroy = destroy
|
||||
|
||||
return script_data
|
||||
@@ -31,10 +31,20 @@ local du = require "lib/dtutils"
|
||||
local df = require("lib/dtutils.file")
|
||||
local ds = require("lib/dtutils.system")
|
||||
|
||||
du.check_min_api_version("7.0.0", "exportLUT")
|
||||
|
||||
-- return data structure for script_manager
|
||||
|
||||
local script_data = {}
|
||||
|
||||
script_data.destroy = nil -- function to destory the script
|
||||
script_data.destroy_method = nil -- set to hide for libs since we can't destroy them commpletely yet, otherwise leave as nil
|
||||
script_data.restart = nil -- how to restart the (lib) script after it's been hidden - i.e. make it visible again
|
||||
script_data.show = nil -- only required for libs since the destroy_method only hides them
|
||||
|
||||
local gettext = dt.gettext
|
||||
|
||||
gettext.bindtextdomain("exportLUT",dt.configuration.config_dir.."/lua/locale/")
|
||||
local CURR_API_STRING = dt.configuration.api_version_string
|
||||
|
||||
local function _(msgid)
|
||||
return gettext.dgettext("exportLUT", msgid)
|
||||
@@ -128,7 +138,7 @@ end
|
||||
local function install_module()
|
||||
if not eL.module_installed then
|
||||
dt.register_lib(
|
||||
_("export haldclut"),
|
||||
"export haldclut",
|
||||
_("export haldclut"),
|
||||
true,
|
||||
false,
|
||||
@@ -145,6 +155,14 @@ local function install_module()
|
||||
end
|
||||
end
|
||||
|
||||
local function destroy()
|
||||
dt.gui.libs["export haldclut"].visible = false
|
||||
end
|
||||
|
||||
local function restart()
|
||||
dt.gui.libs["export haldclut"].visible = true
|
||||
end
|
||||
|
||||
local export_button = dt.new_widget("button"){
|
||||
label = _("export"),
|
||||
clicked_callback = export_luts
|
||||
@@ -162,7 +180,7 @@ if dt.gui.current_view().id == "lighttable" then
|
||||
else
|
||||
if not eL.event_registered then
|
||||
dt.register_event(
|
||||
"view-changed",
|
||||
"exportLUT", "view-changed",
|
||||
function(event, old_view, new_view)
|
||||
if new_view.name == "lighttable" and old_view.name == "darkroom" then
|
||||
install_module()
|
||||
@@ -173,3 +191,9 @@ else
|
||||
end
|
||||
end
|
||||
|
||||
script_data.destroy = destroy
|
||||
script_data.restart = restart
|
||||
script_data.destroy_method = "hide"
|
||||
script_data.show = restart
|
||||
|
||||
return script_data
|
||||
|
||||
@@ -73,12 +73,16 @@ local dtsys = require "lib/dtutils.system"
|
||||
|
||||
-- module name
|
||||
local MODULE_NAME = "ext_editor"
|
||||
local CURR_API_STRING = dt.configuration.api_version_string
|
||||
du.check_min_api_version("7.0.0", MODULE_NAME)
|
||||
|
||||
-- return data structure for script_manager
|
||||
|
||||
-- check API version
|
||||
du.check_min_api_version("5.0.2", MODULE_NAME) -- darktable 3.x
|
||||
local script_data = {}
|
||||
|
||||
script_data.destroy = nil -- function to destory the script
|
||||
script_data.destroy_method = nil -- set to hide for libs since we can't destroy them commpletely yet, otherwise leave as nil
|
||||
script_data.restart = nil -- how to restart the (lib) script after it's been hidden - i.e. make it visible again
|
||||
script_data.show = nil -- only required for libs since the destroy_method only hides them
|
||||
|
||||
-- OS compatibility
|
||||
local PS = dt.configuration.running_os == "windows" and "\\" or "/"
|
||||
@@ -95,7 +99,7 @@ local gettext = dt.gettext
|
||||
gettext.bindtextdomain(MODULE_NAME, dt.configuration.config_dir..PS.."lua"..PS.."locale"..PS)
|
||||
local function _(msgid)
|
||||
return gettext.dgettext(MODULE_NAME, msgid)
|
||||
end
|
||||
end
|
||||
|
||||
-- maximum number of external programs, can be increased to necessity
|
||||
local MAX_EDITORS = 9
|
||||
@@ -112,7 +116,7 @@ local allowed_file_types = {"JPG", "jpg", "JPEG", "jpeg", "TIF", "tif", "TIFF",
|
||||
if not dt.preferences.read(MODULE_NAME, "initialized", "bool") then
|
||||
dt.preferences.write(MODULE_NAME, "lastchoice", "integer", 0)
|
||||
dt.preferences.write(MODULE_NAME, "initialized", "bool", true)
|
||||
end
|
||||
end
|
||||
local lastchoice = 0
|
||||
|
||||
|
||||
@@ -137,23 +141,23 @@ local function UpdateProgramList(combobox, button_edit, button_edit_copy, update
|
||||
program_names[i] = name
|
||||
program_paths[i] = df.sanitize_filename(dt.preferences.read(MODULE_NAME, "program_path_"..i, "string"))
|
||||
n_entries = i
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
lastchoice = dt.preferences.read(MODULE_NAME, "lastchoice", "integer")
|
||||
if lastchoice == 0 and n_entries > 0 then lastchoice = 1 end
|
||||
if lastchoice > n_entries then lastchoice = n_entries end
|
||||
dt.preferences.write(MODULE_NAME, "lastchoice", "integer", lastchoice)
|
||||
lastchoice = dt.preferences.read(MODULE_NAME, "lastchoice", "integer")
|
||||
if lastchoice == 0 and n_entries > 0 then lastchoice = 1 end
|
||||
if lastchoice > n_entries then lastchoice = n_entries end
|
||||
dt.preferences.write(MODULE_NAME, "lastchoice", "integer", lastchoice)
|
||||
|
||||
-- widgets enabled if there is at least one program configured
|
||||
combobox.selected = lastchoice
|
||||
local active = n_entries > 0
|
||||
combobox.sensitive = active
|
||||
button_edit.sensitive = active
|
||||
button_edit_copy.sensitive = active
|
||||
-- widgets enabled if there is at least one program configured
|
||||
combobox.selected = lastchoice
|
||||
local active = n_entries > 0
|
||||
combobox.sensitive = active
|
||||
button_edit.sensitive = active
|
||||
button_edit_copy.sensitive = active
|
||||
|
||||
if update_button_pressed then dt.print(n_entries.._(" editors configured")) end
|
||||
end
|
||||
if update_button_pressed then dt.print(n_entries.._(" editors configured")) end
|
||||
end
|
||||
|
||||
|
||||
-- callback for buttons "edit" and "edit a copy" ------------------------------
|
||||
@@ -163,13 +167,13 @@ local function OpenWith(images, choice, copy)
|
||||
if choice > n_entries then
|
||||
dt.print(_("not a valid choice"))
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
-- check if one image is selected, return if not
|
||||
if #images ~= 1 then
|
||||
dt.print(_("please select one image"))
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
local bin = program_paths[choice]
|
||||
local friendly_name = program_names[choice]
|
||||
@@ -188,18 +192,18 @@ local function OpenWith(images, choice, copy)
|
||||
if v == file_ext then
|
||||
allowed = true
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
if not allowed then
|
||||
dt.print(_("file type not allowed"))
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
-- save image tags, rating and color
|
||||
local tags = {}
|
||||
for i, tag in ipairs(dt.tags.get_tags(image)) do
|
||||
for i, tag in ipairs(dt.tags.get_tags(image)) do
|
||||
if not (string.sub(tag.name, 1, 9) == "darktable") then table.insert(tags, tag) end
|
||||
end
|
||||
end
|
||||
local rating = image.rating
|
||||
local red = image.red
|
||||
local blue = image.blue
|
||||
@@ -221,8 +225,8 @@ local function OpenWith(images, choice, copy)
|
||||
if not copy_success then
|
||||
dt.print(_("error copying file ")..name)
|
||||
return
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- launch the external editor, check result, return if error
|
||||
local run_cmd = bin.." "..df.sanitize_filename(new_name)
|
||||
@@ -231,7 +235,7 @@ local function OpenWith(images, choice, copy)
|
||||
if result ~= 0 then
|
||||
dt.print(_("error launching ")..friendly_name)
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
if copy then
|
||||
-- import in database and group
|
||||
@@ -256,7 +260,7 @@ local function OpenWith(images, choice, copy)
|
||||
while not found do
|
||||
index, new_leader = next(group_members, index)
|
||||
if new_leader ~= image_leader then found = true end
|
||||
end
|
||||
end
|
||||
new_leader:make_group_leader()
|
||||
image:delete()
|
||||
if image.local_copy then image:drop_cache() end -- to fix fail to allocate cache error
|
||||
@@ -269,15 +273,15 @@ local function OpenWith(images, choice, copy)
|
||||
if image.local_copy then image:drop_cache() end -- to fix fail to allocate cache error
|
||||
new_image = dt.database.import(name)
|
||||
new_image:group_with()
|
||||
end
|
||||
end
|
||||
else
|
||||
-- case 3: image is in a group but is not leader
|
||||
image:delete()
|
||||
if image.local_copy then image:drop_cache() end -- to fix fail to allocate cache error
|
||||
new_image = dt.database.import(name)
|
||||
new_image:group_with(image_leader)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- restore image tags, rating and color
|
||||
for i, tag in ipairs(tags) do dt.tags.attach(tag, new_image) end
|
||||
@@ -296,14 +300,14 @@ local function OpenWith(images, choice, copy)
|
||||
-- refresh darkroom view
|
||||
if dt.gui.current_view().id == "darkroom" then
|
||||
dt.gui.views.darkroom.display_image(new_image)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
-- callback function for shortcuts --------------------------------------------
|
||||
local function program_shortcut(event, shortcut)
|
||||
OpenWith(dt.gui.action_images, tonumber(string.sub(shortcut, -2)), false)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
-- export images and reimport in collection -----------------------------------
|
||||
@@ -324,23 +328,23 @@ local function export2collection(storage, image_table, extra_data)
|
||||
if not move_success then
|
||||
dt.print(_("error moving file ")..temp_name)
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
-- import in database and group
|
||||
new_image = dt.database.import(new_name)
|
||||
new_image:group_with(image.group_leader)
|
||||
end
|
||||
end
|
||||
|
||||
dt.print(_("finished exporting"))
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
-- install the module in the UI -----------------------------------------------
|
||||
local function install_module(dr)
|
||||
|
||||
local views = {[dt.gui.views.lighttable] = {"DT_UI_CONTAINER_PANEL_RIGHT_CENTER", 100}}
|
||||
local views = {[dt.gui.views.lighttable] = {"DT_UI_CONTAINER_PANEL_RIGHT_CENTER", 90}}
|
||||
if dr then
|
||||
views = {[dt.gui.views.lighttable] = {"DT_UI_CONTAINER_PANEL_RIGHT_CENTER", 100},
|
||||
views = {[dt.gui.views.lighttable] = {"DT_UI_CONTAINER_PANEL_RIGHT_CENTER", 90},
|
||||
[dt.gui.views.darkroom] = {"DT_UI_CONTAINER_PANEL_LEFT_CENTER", 100}}
|
||||
end
|
||||
|
||||
@@ -363,6 +367,27 @@ local function install_module(dr)
|
||||
end
|
||||
end
|
||||
|
||||
local function destroy()
|
||||
for i = 1, MAX_EDITORS do
|
||||
dt.destroy_event(MODULE_NAME .. i, "shortcut")
|
||||
end
|
||||
dt.destroy_storage("exp2coll")
|
||||
dt.gui.libs[MODULE_NAME].visible = false
|
||||
end
|
||||
|
||||
local function restart()
|
||||
for i = 1, MAX_EDITORS do
|
||||
dt.register_event(MODULE_NAME .. i, "shortcut",
|
||||
program_shortcut, _("edit with program ")..string.format("%02d", i))
|
||||
end
|
||||
dt.register_storage("exp2coll", _("collection"), nil, export2collection)
|
||||
dt.gui.libs[MODULE_NAME].visible = true
|
||||
end
|
||||
|
||||
local function show()
|
||||
dt.gui.libs[MODULE_NAME].visible = true
|
||||
end
|
||||
|
||||
|
||||
-- combobox, with variable number of entries ----------------------------------
|
||||
local combobox = dt.new_widget("combobox") {
|
||||
@@ -372,7 +397,7 @@ local combobox = dt.new_widget("combobox") {
|
||||
dt.preferences.write(MODULE_NAME, "lastchoice", "integer", self.selected)
|
||||
end,
|
||||
""
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
-- button edit ----------------------------------------------------------------
|
||||
@@ -382,8 +407,8 @@ local button_edit = dt.new_widget("button") {
|
||||
--sensitive = false,
|
||||
clicked_callback = function()
|
||||
OpenWith(dt.gui.action_images, combobox.selected, false)
|
||||
end
|
||||
}
|
||||
end
|
||||
}
|
||||
|
||||
|
||||
-- button edit a copy ---------------------------------------------------------
|
||||
@@ -392,8 +417,8 @@ local button_edit_copy = dt.new_widget("button") {
|
||||
tooltip = _("create a copy of the selected image and open it in external editor"),
|
||||
clicked_callback = function()
|
||||
OpenWith(dt.gui.action_images, combobox.selected, true)
|
||||
end
|
||||
}
|
||||
end
|
||||
}
|
||||
|
||||
|
||||
-- button update list ---------------------------------------------------------
|
||||
@@ -402,18 +427,18 @@ local button_update_list = dt.new_widget("button") {
|
||||
tooltip = _("update list of programs if lua preferences are changed"),
|
||||
clicked_callback = function()
|
||||
UpdateProgramList(combobox, button_edit, button_edit_copy, true)
|
||||
end
|
||||
}
|
||||
end
|
||||
}
|
||||
|
||||
|
||||
-- box for the buttons --------------------------------------------------------
|
||||
-- it doesn't seem there is a way to make the buttons equal in size
|
||||
local box1 = dt.new_widget("box") {
|
||||
orientation = "horizontal",
|
||||
orientation = "horizontal",
|
||||
button_edit,
|
||||
button_edit_copy,
|
||||
button_update_list
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
-- table with all the widgets --------------------------------------------------
|
||||
@@ -428,7 +453,7 @@ if dt.gui.current_view().id == "lighttable" then
|
||||
else
|
||||
if not ee.event_registered then
|
||||
dt.register_event(
|
||||
"view-changed",
|
||||
MODULE_NAME, "view-changed",
|
||||
function(event, old_view, new_view)
|
||||
if new_view.name == "lighttable" and old_view.name == "darkroom" then
|
||||
install_module(show_dr)
|
||||
@@ -457,7 +482,7 @@ for i = MAX_EDITORS, 1, -1 do
|
||||
dt.preferences.register(MODULE_NAME, "program_name_"..i, "string",
|
||||
_("name of external editor ")..i,
|
||||
_("friendly name of external editor"), "")
|
||||
end
|
||||
end
|
||||
dt.preferences.register(MODULE_NAME, "show_in_darkrooom", "bool",
|
||||
_("show external editors in darkroom"),
|
||||
_("check to show external editors module also in darkroom (requires restart)"), false)
|
||||
@@ -465,11 +490,18 @@ dt.preferences.register(MODULE_NAME, "show_in_darkrooom", "bool",
|
||||
|
||||
-- register the new shortcuts -------------------------------------------------
|
||||
for i = 1, MAX_EDITORS do
|
||||
dt.register_event("shortcut",
|
||||
dt.register_event(MODULE_NAME .. i, "shortcut",
|
||||
program_shortcut, _("edit with program ")..string.format("%02d", i))
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
script_data.destroy = destroy
|
||||
script_data.restart = restart
|
||||
script_data.destroy_method = "hide"
|
||||
script_data.show = show
|
||||
|
||||
return script_data
|
||||
|
||||
-- end of script --------------------------------------------------------------
|
||||
|
||||
-- vim: shiftwidth=2 expandtab tabstop=2 cindent syntax=lua
|
||||
|
||||
@@ -44,7 +44,6 @@ local dt = require "darktable"
|
||||
local du = require "lib/dtutils"
|
||||
local df = require "lib/dtutils.file"
|
||||
local dtsys = require "lib/dtutils.system"
|
||||
|
||||
local gettext = dt.gettext
|
||||
|
||||
-- constants
|
||||
@@ -52,7 +51,17 @@ local gettext = dt.gettext
|
||||
local MODULE = "face_recognition"
|
||||
local PS = dt.configuration.running_os == "windows" and '\\' or '/'
|
||||
local OUTPUT = dt.configuration.tmp_dir .. PS .. "facerecognition.txt"
|
||||
local CURR_API_STRING = dt.configuration.api_version_string
|
||||
|
||||
du.check_min_api_version("7.0.0", MODULE)
|
||||
|
||||
-- return data structure for script_manager
|
||||
|
||||
local script_data = {}
|
||||
|
||||
script_data.destroy = nil -- function to destory the script
|
||||
script_data.destroy_method = nil -- set to hide for libs since we can't destroy them commpletely yet, otherwise leave as nil
|
||||
script_data.restart = nil -- how to restart the (lib) script after it's been hidden - i.e. make it visible again
|
||||
script_data.show = nil -- only required for libs since the destroy_method only hides them
|
||||
|
||||
-- namespace
|
||||
|
||||
@@ -60,9 +69,6 @@ local fc = {}
|
||||
fc.module_installed = false
|
||||
fc.event_registered = false
|
||||
|
||||
-- ensure we meet the minimum api
|
||||
du.check_min_api_version("5.0.0", "face_recognition")
|
||||
|
||||
-- Tell gettext where to find the .mo file translating messages for a particular domain
|
||||
gettext.bindtextdomain("face_recognition", dt.configuration.config_dir.."/lua/locale/")
|
||||
|
||||
@@ -344,7 +350,7 @@ end
|
||||
local function install_module()
|
||||
if not fc.module_installed then
|
||||
dt.register_lib(
|
||||
"face_recognition", -- Module name
|
||||
MODULE, -- Module name
|
||||
_("face recognition"), -- Visible name
|
||||
true, -- expandable
|
||||
true, -- resetable
|
||||
@@ -357,6 +363,14 @@ local function install_module()
|
||||
end
|
||||
end
|
||||
|
||||
local function destroy()
|
||||
dt.gui.libs[MODULE].visible = false
|
||||
end
|
||||
|
||||
local function restart()
|
||||
dt.gui.libs[MODULE].visible = true
|
||||
end
|
||||
|
||||
-- build the interface
|
||||
|
||||
fc.unknown_tag = dt.new_widget("entry"){
|
||||
@@ -491,7 +505,7 @@ if dt.gui.current_view().id == "lighttable" then
|
||||
else
|
||||
if not fc.event_registered then
|
||||
dt.register_event(
|
||||
"view-changed",
|
||||
MODULE, "view-changed",
|
||||
function(event, old_view, new_view)
|
||||
if new_view.name == "lighttable" and old_view.name == "darkroom" then
|
||||
install_module()
|
||||
@@ -512,5 +526,11 @@ if not dt.preferences.read(MODULE, "initialized", "bool") then
|
||||
dt.preferences.write(MODULE, "initialized", "bool", true)
|
||||
end
|
||||
|
||||
script_data.destroy = destroy
|
||||
script_data.restart = restart
|
||||
script_data.destroy_method = "hide"
|
||||
script_data.show = restart
|
||||
|
||||
return script_data
|
||||
--
|
||||
-- vim: shiftwidth=2 expandtab tabstop=2 cindent syntax=lua
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
Compensate for Fujifilm raw files made using "dynamic range".
|
||||
|
||||
Copyright (C) 2021 Dan Torop <dant@pnym.net>
|
||||
Copyright (C) 2021, 2022 Dan Torop <dant@pnym.net>
|
||||
|
||||
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
|
||||
@@ -61,8 +61,16 @@ local dt = require "darktable"
|
||||
local du = require "lib/dtutils"
|
||||
local df = require "lib/dtutils.file"
|
||||
|
||||
du.check_min_api_version("4.0.0", "fujifilm_dynamic_range")
|
||||
local CURR_API_STRING = dt.configuration.api_version_string
|
||||
du.check_min_api_version("7.0.0", "fujifilm_dynamic_range")
|
||||
|
||||
-- return data structure for script_manager
|
||||
|
||||
local script_data = {}
|
||||
|
||||
script_data.destroy = nil -- function to destory the script
|
||||
script_data.destroy_method = nil -- set to hide for libs since we can't destroy them commpletely yet, otherwise leave as nil
|
||||
script_data.restart = nil -- how to restart the (lib) script after it's been hidden - i.e. make it visible again
|
||||
script_data.show = nil -- only required for libs since the destroy_method only hides them
|
||||
|
||||
local function detect_dynamic_range(event, image)
|
||||
if image.exif_maker ~= "FUJIFILM" then
|
||||
@@ -105,7 +113,20 @@ local function detect_dynamic_range(event, image)
|
||||
dt.print_log("[fujifilm_dynamic_range] raw exposure bias " .. tostring(raf_result))
|
||||
end
|
||||
|
||||
dt.register_event("post-import-image",
|
||||
local function destroy()
|
||||
dt.destroy_event("fujifilm_dr", "post-import-image")
|
||||
end
|
||||
|
||||
if not df.check_if_bin_exists("exiftool") then
|
||||
dt.print_log("Please install exiftool to use fujifilm_dynamic_range")
|
||||
error "[fujifilm_dynamic_range] exiftool not found"
|
||||
end
|
||||
|
||||
dt.register_event("fujifilm_dr", "post-import-image",
|
||||
detect_dynamic_range)
|
||||
|
||||
dt.print_log("[fujifilm_dynamic_range] loaded")
|
||||
|
||||
script_data.destroy = destroy
|
||||
|
||||
return script_data
|
||||
|
||||
@@ -26,11 +26,18 @@ Dependencies:
|
||||
local dt = require "darktable"
|
||||
local du = require "lib/dtutils"
|
||||
local df = require "lib/dtutils.file"
|
||||
|
||||
local gettext = dt.gettext
|
||||
|
||||
du.check_min_api_version("4.0.0", "fujifilm_ratings")
|
||||
local CURR_API_STRING = dt.configuration.api_version_string
|
||||
du.check_min_api_version("7.0.0", "fujifilm_ratings")
|
||||
|
||||
-- return data structure for script_manager
|
||||
|
||||
local script_data = {}
|
||||
|
||||
script_data.destroy = nil -- function to destory the script
|
||||
script_data.destroy_method = nil -- set to hide for libs since we can't destroy them commpletely yet, otherwise leave as nil
|
||||
script_data.restart = nil -- how to restart the (lib) script after it's been hidden - i.e. make it visible again
|
||||
script_data.show = nil -- only required for libs since the destroy_method only hides them
|
||||
|
||||
gettext.bindtextdomain("fujifilm_ratings", dt.configuration.config_dir.."/lua/locale/")
|
||||
|
||||
@@ -68,7 +75,12 @@ local function detect_rating(event, image)
|
||||
end
|
||||
end
|
||||
|
||||
dt.register_event("post-import-image",
|
||||
local function destroy()
|
||||
dt.destroy_event("fujifilm_rat", "post-import-image")
|
||||
end
|
||||
|
||||
dt.register_event("fujifilm_rat", "post-import-image",
|
||||
detect_rating)
|
||||
|
||||
print(_("fujifilm_ratings loaded."))
|
||||
script_data.destroy = destroy
|
||||
return script_data
|
||||
|
||||
@@ -37,7 +37,16 @@ local du = require "lib/dtutils"
|
||||
local df = require "lib/dtutils.file"
|
||||
local gettext = dt.gettext
|
||||
|
||||
du.check_min_api_version("3.0.0", "geoJSON_export")
|
||||
du.check_min_api_version("7.0.0", "geoJSON_export")
|
||||
|
||||
-- return data structure for script_manager
|
||||
|
||||
local script_data = {}
|
||||
|
||||
script_data.destroy = nil -- function to destory the script
|
||||
script_data.destroy_method = nil -- set to hide for libs since we can't destroy them commpletely yet, otherwise leave as nil
|
||||
script_data.restart = nil -- how to restart the (lib) script after it's been hidden - i.e. make it visible again
|
||||
script_data.show = nil -- only required for libs since the destroy_method only hides them
|
||||
|
||||
-- Tell gettext where to find the .mo file translating messages for a particular domain
|
||||
gettext.bindtextdomain("geoJSON_export",dt.configuration.config_dir.."/lua/locale/")
|
||||
@@ -291,6 +300,10 @@ local function create_geoJSON_file(storage, image_table, extra_data)
|
||||
|
||||
end
|
||||
|
||||
local function destroy()
|
||||
dt.destroy_storage("geoJSON_export")
|
||||
end
|
||||
|
||||
-- Preferences
|
||||
dt.preferences.register("geoJSON_export",
|
||||
"CreateMapBoxHTMLFile",
|
||||
@@ -326,3 +339,7 @@ dt.preferences.register("geoJSON_export",
|
||||
|
||||
-- Register
|
||||
dt.register_storage("geoJSON_export", "geoJSON Export", nil, create_geoJSON_file)
|
||||
|
||||
script_data.destroy = destroy
|
||||
|
||||
return script_data
|
||||
|
||||
@@ -28,11 +28,18 @@ require "geoToolbox"
|
||||
local dt = require "darktable"
|
||||
local du = require "lib/dtutils"
|
||||
local df = require "lib/dtutils.file"
|
||||
|
||||
local gettext = dt.gettext
|
||||
|
||||
du.check_min_api_version("3.0.0", "geoToolbox")
|
||||
local CURR_API_STRING = dt.configuration.api_version_string
|
||||
du.check_min_api_version("7.0.0", "geoToolbox")
|
||||
|
||||
-- return data structure for script_manager
|
||||
|
||||
local script_data = {}
|
||||
|
||||
script_data.destroy = nil -- function to destory the script
|
||||
script_data.destroy_method = nil -- set to hide for libs since we can't destroy them commpletely yet, otherwise leave as nil
|
||||
script_data.restart = nil -- how to restart the (lib) script after it's been hidden - i.e. make it visible again
|
||||
script_data.show = nil -- only required for libs since the destroy_method only hides them
|
||||
|
||||
-- Tell gettext where to find the .mo file translating messages for a particular domain
|
||||
gettext.bindtextdomain("geoToolbox",dt.configuration.config_dir.."/lua/locale/")
|
||||
@@ -424,7 +431,7 @@ local function get_distance(lat1, lon1, ele1, lat2, lon2, ele2)
|
||||
math.cos(math.rad(lat1)) * math.cos(math.rad(lat2)) *
|
||||
math.sin(dLon/2) * math.sin(dLon/2)
|
||||
;
|
||||
local angle = 2 * math.atan2(math.sqrt(a), math.sqrt(1-a));
|
||||
local angle = 2 * math.atan(math.sqrt(a), math.sqrt(1-a));
|
||||
local distance = earthRadius * angle; -- Distance in km
|
||||
|
||||
-- Add the elevation to the calculation
|
||||
@@ -595,6 +602,33 @@ local function install_module()
|
||||
end
|
||||
end
|
||||
|
||||
local function destroy()
|
||||
dt.gui.libs["geoToolbox"].visible = false
|
||||
dt.destroy_event("geoToolbox_cd", "shortcut")
|
||||
dt.destroy_event("geoToolbox", "mouse-over-image-changed")
|
||||
dt.destroy_event("geoToolbox_wg", "shortcut")
|
||||
dt.destroy_event("geoToolbox_ng", "shortcut")
|
||||
end
|
||||
|
||||
local function restart()
|
||||
dt.register_event("geoToolbox_cd", "shortcut",
|
||||
print_calc_distance, _("Calculate the distance from latitude and longitude in km"))
|
||||
dt.register_event("geoToolbox", "mouse-over-image-changed",
|
||||
toolbox_calc_distance)
|
||||
|
||||
dt.register_event("geoToolbox_wg", "shortcut",
|
||||
select_with_gps, _("Select all images with GPS information"))
|
||||
dt.register_event("geoToolbox_ng", "shortcut",
|
||||
select_without_gps, _("Select all images without GPS information"))
|
||||
|
||||
dt.gui.libs["geoToolbox"].visible = true
|
||||
end
|
||||
|
||||
local function show()
|
||||
dt.gui.libs["geoToolbox"].visible = true
|
||||
end
|
||||
|
||||
|
||||
|
||||
local separator = dt.new_widget("separator"){}
|
||||
local separator2 = dt.new_widget("separator"){}
|
||||
@@ -689,7 +723,7 @@ if dt.gui.current_view().id == "lighttable" then
|
||||
else
|
||||
if not gT.event_registered then
|
||||
dt.register_event(
|
||||
"view-changed",
|
||||
"geoToolbox", "view-changed",
|
||||
function(event, old_view, new_view)
|
||||
if new_view.name == "lighttable" and old_view.name == "darkroom" then
|
||||
install_module()
|
||||
@@ -709,15 +743,21 @@ dt.preferences.register("geoToolbox",
|
||||
'' )
|
||||
|
||||
-- Register
|
||||
dt.register_event("shortcut",
|
||||
dt.register_event("geoToolbox_cd", "shortcut",
|
||||
print_calc_distance, _("Calculate the distance from latitude and longitude in km"))
|
||||
dt.register_event("mouse-over-image-changed",
|
||||
dt.register_event("geoToolbox", "mouse-over-image-changed",
|
||||
toolbox_calc_distance)
|
||||
|
||||
dt.register_event("shortcut",
|
||||
dt.register_event("geoToolbox_wg", "shortcut",
|
||||
select_with_gps, _("Select all images with GPS information"))
|
||||
dt.register_event("shortcut",
|
||||
dt.register_event("geoToolbox_ng", "shortcut",
|
||||
select_without_gps, _("Select all images without GPS information"))
|
||||
|
||||
script_data.destroy = destroy
|
||||
script_data.restart = restart
|
||||
script_data.destroy_method = "hide"
|
||||
script_data.show = show
|
||||
|
||||
return script_data
|
||||
-- vim: shiftwidth=2 expandtab tabstop=2 cindent syntax=lua
|
||||
-- kate: hl Lua;
|
||||
|
||||
@@ -72,7 +72,16 @@ local dtsys = require "lib/dtutils.system"
|
||||
local gettext = dt.gettext
|
||||
local gimp_widget = nil
|
||||
|
||||
du.check_min_api_version("5.0.0", "gimp")
|
||||
du.check_min_api_version("7.0.0", "gimp")
|
||||
|
||||
-- return data structure for script_manager
|
||||
|
||||
local script_data = {}
|
||||
|
||||
script_data.destroy = nil -- function to destory the script
|
||||
script_data.destroy_method = nil -- set to hide for libs since we can't destroy them commpletely yet, otherwise leave as nil
|
||||
script_data.restart = nil -- how to restart the (lib) script after it's been hidden - i.e. make it visible again
|
||||
script_data.show = nil -- only required for libs since the destroy_method only hides them
|
||||
|
||||
-- Tell gettext where to find the .mo file translating messages for a particular domain
|
||||
gettext.bindtextdomain("gimp",dt.configuration.config_dir.."/lua/locale/")
|
||||
@@ -189,6 +198,10 @@ local function gimp_edit(storage, image_table, extra_data) --finalize
|
||||
end
|
||||
end
|
||||
|
||||
local function destroy()
|
||||
dt.destroy_storage("module_gimp")
|
||||
end
|
||||
|
||||
-- Register
|
||||
|
||||
gimp_widget = dt.new_widget("check_button"){
|
||||
@@ -203,3 +216,6 @@ gimp_widget = dt.new_widget("check_button"){
|
||||
dt.register_storage("module_gimp", _("Edit with GIMP"), show_status, gimp_edit, nil, nil, gimp_widget)
|
||||
|
||||
--
|
||||
script_data.destroy = destroy
|
||||
|
||||
return script_data
|
||||
|
||||
@@ -25,11 +25,18 @@ For each source folder, a separate <trk> is generated in the gpx file.
|
||||
local dt = require "darktable"
|
||||
local df = require "lib/dtutils.file"
|
||||
local dl = require "lib/dtutils"
|
||||
|
||||
local gettext = dt.gettext
|
||||
|
||||
dl.check_min_api_version("3.0.0", "gpx-export")
|
||||
local CURR_API_STRING = dt.configuration.api_version_string
|
||||
dl.check_min_api_version("7.0.0", "gpx_export")
|
||||
|
||||
-- return data structure for script_manager
|
||||
|
||||
local script_data = {}
|
||||
|
||||
script_data.destroy = nil -- function to destory the script
|
||||
script_data.destroy_method = nil -- set to hide for libs since we can't destroy them commpletely yet, otherwise leave as nil
|
||||
script_data.restart = nil -- how to restart the (lib) script after it's been hidden - i.e. make it visible again
|
||||
script_data.show = nil -- only required for libs since the destroy_method only hides them
|
||||
|
||||
-- Tell gettext where to find the .mo file translating messages for a particular domain
|
||||
gettext.bindtextdomain("gpx_export",dt.configuration.config_dir.."/lua/locale/")
|
||||
@@ -149,6 +156,14 @@ local function install_module()
|
||||
end
|
||||
end
|
||||
|
||||
local function destroy()
|
||||
dt.gui.libs["gpx_exporter"].visible = false
|
||||
end
|
||||
|
||||
local function restart()
|
||||
dt.gui.libs["gpx_exporter"].visible = true
|
||||
end
|
||||
|
||||
gpx.widget = dt.new_widget("box")
|
||||
{
|
||||
orientation = "vertical",
|
||||
@@ -175,7 +190,7 @@ if dt.gui.current_view().id == "lighttable" then
|
||||
else
|
||||
if not gpx.event_registered then
|
||||
dt.register_event(
|
||||
"view-changed",
|
||||
"gpx_export", "view-changed",
|
||||
function(event, old_view, new_view)
|
||||
if new_view.name == "lighttable" and old_view.name == "darkroom" then
|
||||
install_module()
|
||||
@@ -185,3 +200,10 @@ else
|
||||
gpx.event_registered = true
|
||||
end
|
||||
end
|
||||
|
||||
script_data.destroy = destroy
|
||||
script_data.restart = restart
|
||||
script_data.destroy_method = "hide"
|
||||
script_data.show = restart
|
||||
|
||||
return script_data
|
||||
|
||||
78
contrib/harmonic_armature_guide.lua
Normal file
78
contrib/harmonic_armature_guide.lua
Normal file
@@ -0,0 +1,78 @@
|
||||
--[[
|
||||
harmonic artmature guide for darktable
|
||||
|
||||
copyright (c) 2021 Hubert Kowalski
|
||||
|
||||
darktable 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.
|
||||
|
||||
darktable 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 darktable. If not, see <http://www.gnu.org/licenses/>.
|
||||
]]
|
||||
|
||||
--[[
|
||||
HARMONIC ARMATURE GUIDE
|
||||
Harmonic Armature (also known as 14 line armature)
|
||||
|
||||
INSTALLATION
|
||||
* copy this file in $CONFIGDIR/lua/contrib where CONFIGDIR is your darktable configuration directory
|
||||
* add the following line in the file $CONFIGDIR/luarc
|
||||
require "contrib/harmonic_armature_guide"
|
||||
|
||||
USAGE
|
||||
* when using guides, select "harmonic armature" as guide
|
||||
]]
|
||||
|
||||
local dt = require "darktable"
|
||||
local du = require "lib/dtutils"
|
||||
local gettext = dt.gettext
|
||||
|
||||
du.check_min_api_version("2.0.0", "harmonic_armature_guide")
|
||||
|
||||
-- Tell gettext where to find the .mo file translating messages for a particular domain
|
||||
gettext.bindtextdomain("harmonic_armature_guide",dt.configuration.config_dir.."/lua/locale/")
|
||||
|
||||
local function _(msgid)
|
||||
return gettext.dgettext("harmonic_armature_guide", msgid)
|
||||
end
|
||||
|
||||
dt.guides.register_guide("harmonic armature",
|
||||
-- draw
|
||||
function(cairo, x, y, width, height, zoom_scale)
|
||||
cairo:save()
|
||||
|
||||
cairo:translate(x, y)
|
||||
cairo:scale(width, height)
|
||||
|
||||
cairo:move_to(0,0)
|
||||
cairo:line_to(1, 0.5)
|
||||
cairo:line_to(0.5, 1)
|
||||
cairo:line_to(0,0)
|
||||
cairo:line_to(1, 1)
|
||||
cairo:line_to(0.5, 0)
|
||||
cairo:line_to(0, 0.5)
|
||||
cairo:line_to(1, 1)
|
||||
|
||||
cairo:move_to(1, 0)
|
||||
cairo:line_to(0, 0.5)
|
||||
cairo:line_to(0.5, 1)
|
||||
cairo:line_to(1, 0)
|
||||
cairo:line_to(0, 1)
|
||||
cairo:line_to(0.5, 0)
|
||||
cairo:line_to(1, 0.5)
|
||||
cairo:line_to(0, 1)
|
||||
|
||||
cairo:restore()
|
||||
end,
|
||||
-- gui
|
||||
function()
|
||||
return dt.new_widget("label"){label = _("harmonic armature"), halign = "start"}
|
||||
end
|
||||
)
|
||||
196
contrib/hif_group_leader.lua
Normal file
196
contrib/hif_group_leader.lua
Normal file
@@ -0,0 +1,196 @@
|
||||
--[[
|
||||
|
||||
hif_group_leader.lua - Make hif image group leader
|
||||
|
||||
Copyright (C) 2024 Bill Ferguson <wpferguson@gmail.com>.
|
||||
|
||||
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/>.
|
||||
]]
|
||||
--[[
|
||||
hif_group_leader - Make hif image group leader
|
||||
|
||||
After a film roll is imported, check for RAW-JPG image groups
|
||||
and make the JPG image the group leader. This is on by default
|
||||
but can be disabled in preferences.
|
||||
|
||||
Shortcuts are included to filter existing collections or
|
||||
selections of images and make the hif the group leader.
|
||||
|
||||
ADDITIONAL SOFTWARE NEEDED FOR THIS SCRIPT
|
||||
None
|
||||
|
||||
USAGE
|
||||
Start script from script_manager
|
||||
Assign keys to the shortcuts
|
||||
|
||||
BUGS, COMMENTS, SUGGESTIONS
|
||||
Bill Ferguson <wpferguson@gmail.com>
|
||||
|
||||
CHANGES
|
||||
]]
|
||||
|
||||
local dt = require "darktable"
|
||||
local du = require "lib/dtutils"
|
||||
local df = require "lib/dtutils.file"
|
||||
|
||||
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
-- C O N S T A N T S
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
||||
local MODULE = "hif_group_leader"
|
||||
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
-- A P I C H E C K
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
||||
du.check_min_api_version("7.0.0", MODULE)
|
||||
|
||||
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
-- S C R I P T M A N A G E R I N T E G R A T I O N
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
||||
local script_data = {}
|
||||
|
||||
script_data.destroy = nil -- function to destory the script
|
||||
script_data.destroy_method = nil -- set to hide for libs since we can't destroy them commpletely yet
|
||||
script_data.restart = nil -- how to restart the (lib) script after it's been hidden - i.e. make it visible again
|
||||
script_data.show = nil -- only required for libs since the destroy_method only hides them
|
||||
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
-- I 1 8 N
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
||||
local gettext = dt.gettext
|
||||
|
||||
-- Tell gettext where to find the .mo file translating messages for a particular domain
|
||||
gettext.bindtextdomain(MODULE, dt.configuration.config_dir .. "/lua/locale/")
|
||||
|
||||
local function _(msgid)
|
||||
return gettext.dgettext(MODULE, msgid)
|
||||
end
|
||||
|
||||
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
-- P R E F E R E N C E S
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
||||
dt.preferences.register(MODULE, "on_import", "bool", _("make hif group leader on import"), _("automatically make the hif file the group leader when raw + hif are imported"), true)
|
||||
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
-- N A M E S P A C E
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
||||
local jgloi = {}
|
||||
jgloi.images = {}
|
||||
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
-- F U N C T I O N S
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
||||
local function toggle_global_toolbox_grouping()
|
||||
dt.gui.libs.global_toolbox.grouping = false
|
||||
dt.gui.libs.global_toolbox.grouping = true
|
||||
end
|
||||
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
-- M A I N P R O G R A M
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
||||
local function make_hif_group_leader(images)
|
||||
-- if the image is part of a group, make it the leader
|
||||
for _, image in ipairs(images) do
|
||||
if #image:get_group_members() > 1 then
|
||||
image:make_group_leader()
|
||||
end
|
||||
end
|
||||
if dt.gui.libs.global_toolbox.grouping then
|
||||
-- toggle the grouping to make the new leader show
|
||||
toggle_global_toolbox_grouping()
|
||||
end
|
||||
end
|
||||
|
||||
local function make_existing_hif_group_leader(images)
|
||||
for _, image in ipairs(images) do
|
||||
if string.lower(df.get_filetype(image.filename)) == "hif" then
|
||||
if #image:get_group_members() > 1 then
|
||||
image:make_group_leader()
|
||||
end
|
||||
end
|
||||
end
|
||||
if dt.gui.libs.global_toolbox.grouping then
|
||||
-- toggle the grouping to make the new leader show
|
||||
toggle_global_toolbox_grouping()
|
||||
end
|
||||
end
|
||||
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
-- D A R K T A B L E I N T E G R A T I O N
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
||||
local function destroy()
|
||||
if dt.preferences.read(MODULE, "on_import", "bool") then
|
||||
dt.destroy_event(MODULE, "post-import-film")
|
||||
dt.destroy_event(MODULE, "post-import-image")
|
||||
end
|
||||
dt.destroy_event(MODULE .. "_collect", "shortcut")
|
||||
dt.destroy_event(MODULE .. "_select", "shortcut")
|
||||
end
|
||||
|
||||
script_data.destroy = destroy
|
||||
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
-- E V E N T S
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
||||
if dt.preferences.read(MODULE, "on_import", "bool") then
|
||||
dt.register_event(MODULE, "post-import-film",
|
||||
function(event, film_roll)
|
||||
-- ignore the film roll, it contains all the images, not just the imported
|
||||
local images = jgloi.images
|
||||
if #images > 0 then
|
||||
jgloi.images = {}
|
||||
make_hif_group_leader(images)
|
||||
end
|
||||
end
|
||||
)
|
||||
|
||||
dt.register_event(MODULE, "post-import-image",
|
||||
function(event, image)
|
||||
if string.lower(df.get_filetype(image.filename)) == "hif" then
|
||||
table.insert(jgloi.images, image)
|
||||
end
|
||||
end
|
||||
)
|
||||
end
|
||||
|
||||
dt.register_event(MODULE .. "_collect", "shortcut",
|
||||
function(event, shortcut)
|
||||
-- ignore the film roll, it contains all the images, not just the imported
|
||||
local images = dt.collection
|
||||
make_existing_hif_group_leader(images)
|
||||
end,
|
||||
_("Make hif group leader for collection")
|
||||
)
|
||||
|
||||
dt.register_event(MODULE .. "_select", "shortcut",
|
||||
function(event, shortcut)
|
||||
local images = dt.gui.selection()
|
||||
make_existing_hif_group_leader(images)
|
||||
end,
|
||||
_("Make hif group leader for selection")
|
||||
)
|
||||
|
||||
return script_data
|
||||
@@ -54,7 +54,16 @@ local executable_table = {"hugin", "hugin_executor", "pto_gen"}
|
||||
local PQ = dt.configuration.running_os == "windows" and '"' or "'"
|
||||
|
||||
-- works with darktable API version from 5.0.0 on
|
||||
du.check_min_api_version("5.0.0", "hugin")
|
||||
du.check_min_api_version("7.0.0", "hugin")
|
||||
|
||||
-- return data structure for script_manager
|
||||
|
||||
local script_data = {}
|
||||
|
||||
script_data.destroy = nil -- function to destory the script
|
||||
script_data.destroy_method = nil -- set to hide for libs since we can't destroy them commpletely yet, otherwise leave as nil
|
||||
script_data.restart = nil -- how to restart the (lib) script after it's been hidden - i.e. make it visible again
|
||||
script_data.show = nil -- only required for libs since the destroy_method only hides them
|
||||
|
||||
-- Tell gettext where to find the .mo file translating messages for a particular domain
|
||||
gettext.bindtextdomain("hugin",dt.configuration.config_dir.."/lua/locale/")
|
||||
@@ -205,6 +214,10 @@ local function create_panorama(storage, image_table, extra_data) --finalize
|
||||
end
|
||||
end
|
||||
|
||||
local function destroy()
|
||||
dt.destroy_storage(namespace)
|
||||
end
|
||||
|
||||
-- Register
|
||||
if dt.configuration.running_os ~= "linux" then
|
||||
exec_widget = df.executable_path_widget(executable_table)
|
||||
@@ -224,6 +237,8 @@ hugin_widget = dt.new_widget("box") {
|
||||
|
||||
dt.register_storage(namespace, _("hugin panorama"), show_status, create_panorama, nil, nil, hugin_widget)
|
||||
|
||||
script_data.destroy = destroy
|
||||
|
||||
return script_data
|
||||
--
|
||||
-- vim: shiftwidth=2 expandtab tabstop=2 cindent syntax=lua
|
||||
|
||||
@@ -71,7 +71,16 @@ local job = nil
|
||||
local PS = dt.configuration.running_os == "windows" and "\\" or "/"
|
||||
|
||||
-- works with LUA API version 5.0.0
|
||||
du.check_min_api_version("5.0.0", "image_stack")
|
||||
du.check_min_api_version("7.0.0", "image_stack")
|
||||
|
||||
-- return data structure for script_manager
|
||||
|
||||
local script_data = {}
|
||||
|
||||
script_data.destroy = nil -- function to destory the script
|
||||
script_data.destroy_method = nil -- set to hide for libs since we can't destroy them commpletely yet, otherwise leave as nil
|
||||
script_data.restart = nil -- how to restart the (lib) script after it's been hidden - i.e. make it visible again
|
||||
script_data.show = nil -- only required for libs since the destroy_method only hides them
|
||||
|
||||
-- Tell gettext where to find the .mo file translating messages for a particular domain
|
||||
gettext.bindtextdomain("image_stack",dt.configuration.config_dir.."/lua/locale/")
|
||||
@@ -452,6 +461,10 @@ local function stop_job()
|
||||
job.valid = false
|
||||
end
|
||||
|
||||
local function destroy()
|
||||
dt.destroy_storage("module_image_stack")
|
||||
end
|
||||
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
-- main program
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
@@ -585,3 +598,6 @@ dt.preferences.register("align_image_stack", "align_use_gpu", -- name
|
||||
|
||||
dt.register_storage("module_image_stack", _("image stack"), show_status, image_stack, nil, nil, image_stack_widget)
|
||||
|
||||
script_data.destroy = destroy
|
||||
|
||||
return script_data
|
||||
|
||||
@@ -107,15 +107,22 @@ local dt = require "darktable"
|
||||
local du = require "lib/dtutils"
|
||||
local df = require "lib/dtutils.file"
|
||||
local ds = require "lib/dtutils.string"
|
||||
|
||||
local gettext = dt.gettext
|
||||
|
||||
local img_time = {}
|
||||
img_time.module_installed = false
|
||||
img_time.event_registered = false
|
||||
|
||||
du.check_min_api_version("3.0.0", "image_time")
|
||||
local CURR_API_STRING = dt.configuration.api_version_string
|
||||
du.check_min_api_version("7.0.0", "image_time")
|
||||
|
||||
-- return data structure for script_manager
|
||||
|
||||
local script_data = {}
|
||||
|
||||
script_data.destroy = nil -- function to destory the script
|
||||
script_data.destroy_method = nil -- set to hide for libs since we can't destroy them commpletely yet, otherwise leave as nil
|
||||
script_data.restart = nil -- how to restart the (lib) script after it's been hidden - i.e. make it visible again
|
||||
script_data.show = nil -- only required for libs since the destroy_method only hides them
|
||||
|
||||
|
||||
-- Tell gettext where to find the .mo file translating messages for a particular domain
|
||||
@@ -410,6 +417,14 @@ local function install_module()
|
||||
end
|
||||
end
|
||||
|
||||
local function destroy()
|
||||
dt.gui.libs["image_time"].visible = false
|
||||
end
|
||||
|
||||
local function restart()
|
||||
dt.gui.libs["image_time"].visible = true
|
||||
end
|
||||
|
||||
-- widgets
|
||||
|
||||
img_time.widgets = {
|
||||
@@ -553,7 +568,7 @@ if dt.gui.current_view().id == "lighttable" then
|
||||
else
|
||||
if not img_time.event_registered then
|
||||
dt.register_event(
|
||||
"view-changed",
|
||||
"image_time", "view-changed",
|
||||
function(event, old_view, new_view)
|
||||
if new_view.name == "lighttable" and old_view.name == "darkroom" then
|
||||
install_module()
|
||||
@@ -564,3 +579,9 @@ else
|
||||
end
|
||||
end
|
||||
|
||||
script_data.destroy = destroy
|
||||
script_data.restart = restart
|
||||
script_data.destroy_method = "hide"
|
||||
script_data.show = restart
|
||||
|
||||
return script_data
|
||||
|
||||
196
contrib/jpg_group_leader.lua
Normal file
196
contrib/jpg_group_leader.lua
Normal file
@@ -0,0 +1,196 @@
|
||||
--[[
|
||||
|
||||
jpg_group_leader.lua - Make jpg image group leader
|
||||
|
||||
Copyright (C) 2024 Bill Ferguson <wpferguson@gmail.com>.
|
||||
|
||||
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/>.
|
||||
]]
|
||||
--[[
|
||||
jpg_group_leader - Make jpg image group leader
|
||||
|
||||
After a film roll is imported, check for RAW-JPG image groups
|
||||
and make the JPG image the group leader. This is on by default
|
||||
but can be disabled in preferences.
|
||||
|
||||
Shortcuts are included to filter existing collections or
|
||||
selections of images and make the jpg the group leader.
|
||||
|
||||
ADDITIONAL SOFTWARE NEEDED FOR THIS SCRIPT
|
||||
None
|
||||
|
||||
USAGE
|
||||
Start script from script_manager
|
||||
Assign keys to the shortcuts
|
||||
|
||||
BUGS, COMMENTS, SUGGESTIONS
|
||||
Bill Ferguson <wpferguson@gmail.com>
|
||||
|
||||
CHANGES
|
||||
]]
|
||||
|
||||
local dt = require "darktable"
|
||||
local du = require "lib/dtutils"
|
||||
local df = require "lib/dtutils.file"
|
||||
|
||||
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
-- C O N S T A N T S
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
||||
local MODULE = "jpg_group_leader"
|
||||
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
-- A P I C H E C K
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
||||
du.check_min_api_version("7.0.0", MODULE)
|
||||
|
||||
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
-- S C R I P T M A N A G E R I N T E G R A T I O N
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
||||
local script_data = {}
|
||||
|
||||
script_data.destroy = nil -- function to destory the script
|
||||
script_data.destroy_method = nil -- set to hide for libs since we can't destroy them commpletely yet
|
||||
script_data.restart = nil -- how to restart the (lib) script after it's been hidden - i.e. make it visible again
|
||||
script_data.show = nil -- only required for libs since the destroy_method only hides them
|
||||
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
-- I 1 8 N
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
||||
local gettext = dt.gettext
|
||||
|
||||
-- Tell gettext where to find the .mo file translating messages for a particular domain
|
||||
gettext.bindtextdomain(MODULE, dt.configuration.config_dir .. "/lua/locale/")
|
||||
|
||||
local function _(msgid)
|
||||
return gettext.dgettext(MODULE, msgid)
|
||||
end
|
||||
|
||||
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
-- P R E F E R E N C E S
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
||||
dt.preferences.register(MODULE, "on_import", "bool", _("make jpg group leader on import"), _("automatically make the jpg file the group leader when raw + jpg are imported"), true)
|
||||
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
-- N A M E S P A C E
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
||||
local jgloi = {}
|
||||
jgloi.images = {}
|
||||
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
-- F U N C T I O N S
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
||||
local function toggle_global_toolbox_grouping()
|
||||
dt.gui.libs.global_toolbox.grouping = false
|
||||
dt.gui.libs.global_toolbox.grouping = true
|
||||
end
|
||||
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
-- M A I N P R O G R A M
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
||||
local function make_jpg_group_leader(images)
|
||||
-- if the image is part of a group, make it the leader
|
||||
for _, image in ipairs(images) do
|
||||
if #image:get_group_members() > 1 then
|
||||
image:make_group_leader()
|
||||
end
|
||||
end
|
||||
if dt.gui.libs.global_toolbox.grouping then
|
||||
-- toggle the grouping to make the new leader show
|
||||
toggle_global_toolbox_grouping()
|
||||
end
|
||||
end
|
||||
|
||||
local function make_existing_jpg_group_leader(images)
|
||||
for _, image in ipairs(images) do
|
||||
if string.lower(df.get_filetype(image.filename)) == "jpg" then
|
||||
if #image:get_group_members() > 1 then
|
||||
image:make_group_leader()
|
||||
end
|
||||
end
|
||||
end
|
||||
if dt.gui.libs.global_toolbox.grouping then
|
||||
-- toggle the grouping to make the new leader show
|
||||
toggle_global_toolbox_grouping()
|
||||
end
|
||||
end
|
||||
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
-- D A R K T A B L E I N T E G R A T I O N
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
||||
local function destroy()
|
||||
if dt.preferences.read(MODULE, "on_import", "bool") then
|
||||
dt.destroy_event(MODULE, "post-import-film")
|
||||
dt.destroy_event(MODULE, "post-import-image")
|
||||
end
|
||||
dt.destroy_event(MODULE .. "_collect", "shortcut")
|
||||
dt.destroy_event(MODULE .. "_select", "shortcut")
|
||||
end
|
||||
|
||||
script_data.destroy = destroy
|
||||
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
-- E V E N T S
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
||||
if dt.preferences.read(MODULE, "on_import", "bool") then
|
||||
dt.register_event(MODULE, "post-import-film",
|
||||
function(event, film_roll)
|
||||
-- ignore the film roll, it contains all the images, not just the imported
|
||||
local images = jgloi.images
|
||||
if #images > 0 then
|
||||
jgloi.images = {}
|
||||
make_jpg_group_leader(images)
|
||||
end
|
||||
end
|
||||
)
|
||||
|
||||
dt.register_event(MODULE, "post-import-image",
|
||||
function(event, image)
|
||||
if string.lower(df.get_filetype(image.filename)) == "jpg" then
|
||||
table.insert(jgloi.images, image)
|
||||
end
|
||||
end
|
||||
)
|
||||
end
|
||||
|
||||
dt.register_event(MODULE .. "_collect", "shortcut",
|
||||
function(event, shortcut)
|
||||
-- ignore the film roll, it contains all the images, not just the imported
|
||||
local images = dt.collection
|
||||
make_existing_jpg_group_leader(images)
|
||||
end,
|
||||
_("Make jpg group leader for collection")
|
||||
)
|
||||
|
||||
dt.register_event(MODULE .. "_select", "shortcut",
|
||||
function(event, shortcut)
|
||||
local images = dt.gui.selection()
|
||||
make_existing_jpg_group_leader(images)
|
||||
end,
|
||||
_("Make jpg group leader for selection")
|
||||
)
|
||||
|
||||
return script_data
|
||||
@@ -43,7 +43,16 @@ local gettext = dt.gettext
|
||||
|
||||
local PS = dt.configuration.running_os == "windows" and "\\" or "/"
|
||||
|
||||
du.check_min_api_version("5.0.0", kml_export)
|
||||
du.check_min_api_version("7.0.0", "kml_export")
|
||||
|
||||
-- return data structure for script_manager
|
||||
|
||||
local script_data = {}
|
||||
|
||||
script_data.destroy = nil -- function to destory the script
|
||||
script_data.destroy_method = nil -- set to hide for libs since we can't destroy them commpletely yet, otherwise leave as nil
|
||||
script_data.restart = nil -- how to restart the (lib) script after it's been hidden - i.e. make it visible again
|
||||
script_data.show = nil -- only required for libs since the destroy_method only hides them
|
||||
|
||||
-- Tell gettext where to find the .mo file translating messages for a particular domain
|
||||
gettext.bindtextdomain("kml_export",dt.configuration.config_dir.."/lua/locale/")
|
||||
@@ -301,6 +310,10 @@ local function create_kml_file(storage, image_table, extra_data)
|
||||
|
||||
end
|
||||
|
||||
local function destroy()
|
||||
dt.destroy_storage("kml_export")
|
||||
end
|
||||
|
||||
-- Preferences
|
||||
if dt.configuration.running_os == "windows" then
|
||||
dt.preferences.register("kml_export",
|
||||
@@ -322,7 +335,7 @@ local defaultDir = ''
|
||||
if dt.configuration.running_os == "windows" then
|
||||
defaultDir = os.getenv("USERPROFILE")
|
||||
elseif dt.configuration.running_os == "macos" then
|
||||
defaultDir = os.getenv("home")
|
||||
defaultDir = os.getenv("HOME")
|
||||
else
|
||||
local handle = io.popen("xdg-user-dir DESKTOP")
|
||||
defaultDir = handle:read()
|
||||
@@ -369,5 +382,9 @@ else
|
||||
dt.register_storage("kml_export", _("KML/KMZ Export"), nil, create_kml_file)
|
||||
end
|
||||
|
||||
script_data.destroy = destroy
|
||||
|
||||
return script_data
|
||||
|
||||
-- vim: shiftwidth=2 expandtab tabstop=2 cindent syntax=lua
|
||||
-- kate: hl Lua;
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
--[[
|
||||
PASSPORT CROPPING GUIDE
|
||||
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.
|
||||
(https://poliisi.fi/documents/25235045/31329600/Passport-photograph-instructions-by-the-police-2020-EN-fixed.pdf/1eec2f4c-aed7-68e0-c112-0a8f25e0328d/Passport-photograph-instructions-by-the-police-2020-EN-fixed.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.
|
||||
|
||||
INSTALLATION
|
||||
* copy this file in $CONFIGDIR/lua/ where CONFIGDIR is your darktable configuration directory
|
||||
|
||||
105
contrib/passport_guide_germany.lua
Normal file
105
contrib/passport_guide_germany.lua
Normal file
@@ -0,0 +1,105 @@
|
||||
--[[
|
||||
German passport photo cropping guide for darktable.
|
||||
Derived from the passport cropping guide by Kåre Hampf.
|
||||
|
||||
copyright (c) 2017 Kåre Hampf
|
||||
copyright (c) 2024 Christian Sültrop
|
||||
|
||||
darktable 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.
|
||||
|
||||
darktable 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 darktable. If not, see <http://www.gnu.org/licenses/>.
|
||||
]]
|
||||
|
||||
--[[
|
||||
PASSPORT CROPPING GUIDE
|
||||
Guides for cropping passport and ID card ("Personalausweis") photos based on the "Passbild-Schablone"
|
||||
from the German Federal Ministry of the Interior and Community.
|
||||
(https://www.bmi.bund.de/SharedDocs/downloads/DE/veroeffentlichungen/themen/moderne-verwaltung/ausweise/passbild-schablone-erwachsene.pdf?__blob=publicationFile&v=3)
|
||||
|
||||
INSTALLATION
|
||||
* copy this file in $CONFIGDIR/lua/ where CONFIGDIR is your darktable configuration directory
|
||||
* add the following line in the file $CONFIGDIR/luarc
|
||||
require "passport_guide_germany"
|
||||
* (optional) add the line:
|
||||
"plugins/darkroom/clipping/extra_aspect_ratios/passport 35x45mm=45:35"
|
||||
to $CONFIGDIR/darktablerc
|
||||
|
||||
USAGE
|
||||
* when using the cropping tool, select "Passport Photo Germany" as guide and if you added the line in yout rc
|
||||
select "passport 35x45mm" as aspect
|
||||
]]
|
||||
|
||||
local dt = require "darktable"
|
||||
local du = require "lib/dtutils"
|
||||
local gettext = dt.gettext
|
||||
|
||||
du.check_min_api_version("2.0.0", "passport_guide_germany")
|
||||
|
||||
-- Tell gettext where to find the .mo file translating messages for a particular domain
|
||||
gettext.bindtextdomain("passport_guide_germany",dt.configuration.config_dir.."/lua/locale/")
|
||||
|
||||
local function _(msgid)
|
||||
return gettext.dgettext("passport_guide_germany", msgid)
|
||||
end
|
||||
|
||||
dt.guides.register_guide("Passport Photo Germany",
|
||||
-- draw
|
||||
function(cairo, x, y, width, height, zoom_scale)
|
||||
local _width, _height
|
||||
|
||||
-- get the max 35x45 rectangle
|
||||
local aspect_ratio = 45 / 35
|
||||
if width * aspect_ratio > height then
|
||||
_width = height / aspect_ratio
|
||||
_height = height
|
||||
else
|
||||
_width = width
|
||||
_height = width * aspect_ratio
|
||||
end
|
||||
|
||||
cairo:save()
|
||||
|
||||
cairo:translate(x + (width - _width) / 2, y + (height - _height) / 2)
|
||||
cairo:scale(_width / 35, _height / 45)
|
||||
|
||||
-- the outer rectangle
|
||||
cairo:rectangle( 0, 0, 35, 45)
|
||||
|
||||
-- Nose position: The nose tip must be between these lines
|
||||
cairo:draw_line(15.5, 45, 15.5, 13)
|
||||
cairo:draw_line(35-15.5, 45, 35-15.5, 13)
|
||||
|
||||
-- Face height
|
||||
-- optimum face height: The upper end of the head should be between these lines
|
||||
cairo:draw_line(0, 4, 35, 4)
|
||||
cairo:draw_line(0, 8, 35, 8)
|
||||
|
||||
-- tolerated face height: The upper end of the head must not be below this line
|
||||
cairo:draw_line(6, 13, 30, 13)
|
||||
|
||||
-- Eye area: The eyes must be between these lines
|
||||
cairo:draw_line(0, 13, 35, 13)
|
||||
cairo:draw_line(0, 23, 35, 23)
|
||||
|
||||
-- Cheek line: The cheek must lie on this line
|
||||
cairo:draw_line(9, 45-5, 27, 45-5)
|
||||
|
||||
cairo:restore()
|
||||
end,
|
||||
-- gui
|
||||
function()
|
||||
return dt.new_widget("label"){label = _("Passport Photo Germany"), halign = "start"}
|
||||
end
|
||||
)
|
||||
|
||||
-- kate: tab-indents: off; indent-width 2; replace-tabs on; remove-trailing-space on; hl Lua;
|
||||
-- vim: shiftwidth=2 expandtab tabstop=2 cindent syntax=lua
|
||||
@@ -56,7 +56,16 @@ if not df.check_if_bin_exists("pdflatex") then
|
||||
return
|
||||
end
|
||||
|
||||
du.check_min_api_version("4.0.0", "pdf_slideshow")
|
||||
du.check_min_api_version("7.0.0", "pdf_slideshow")
|
||||
|
||||
-- return data structure for script_manager
|
||||
|
||||
local script_data = {}
|
||||
|
||||
script_data.destroy = nil -- function to destory the script
|
||||
script_data.destroy_method = nil -- set to hide for libs since we can't destroy them commpletely yet, otherwise leave as nil
|
||||
script_data.restart = nil -- how to restart the (lib) script after it's been hidden - i.e. make it visible again
|
||||
script_data.show = nil -- only required for libs since the destroy_method only hides them
|
||||
|
||||
dt.preferences.register
|
||||
("pdf_slideshow","open with","string",
|
||||
@@ -164,6 +173,10 @@ local function slide(latexfile,i,image,file)
|
||||
my_write(latexfile,"\\end{figure}\n")
|
||||
end
|
||||
|
||||
local function destroy()
|
||||
dt.destroy_storage("pdf_slideshow")
|
||||
end
|
||||
|
||||
dt.register_storage("pdf_slideshow",_("pdf slideshow"),
|
||||
nil,
|
||||
function(storage,image_table)
|
||||
@@ -243,5 +256,8 @@ dt.register_storage("pdf_slideshow",_("pdf slideshow"),
|
||||
nil,
|
||||
widget)
|
||||
|
||||
script_data.destroy = destroy
|
||||
|
||||
return script_data
|
||||
--
|
||||
-- vim: shiftwidth=2 expandtab tabstop=2 cindent syntax=lua
|
||||
|
||||
@@ -39,13 +39,21 @@
|
||||
local dt = require "darktable"
|
||||
local du = require "lib/dtutils"
|
||||
local df = require "lib/dtutils.file"
|
||||
|
||||
local dtsys = require "lib/dtutils.system"
|
||||
|
||||
local MODULE_NAME = "photils"
|
||||
du.check_min_api_version("5.0.0", MODULE_NAME)
|
||||
du.check_min_api_version("7.0.0", MODULE_NAME)
|
||||
|
||||
-- return data structure for script_manager
|
||||
|
||||
local script_data = {}
|
||||
|
||||
script_data.destroy = nil -- function to destory the script
|
||||
script_data.destroy_method = nil -- set to hide for libs since we can't destroy them commpletely yet, otherwise leave as nil
|
||||
script_data.restart = nil -- how to restart the (lib) script after it's been hidden - i.e. make it visible again
|
||||
script_data.show = nil -- only required for libs since the destroy_method only hides them
|
||||
|
||||
|
||||
local CURR_API_STRING = dt.configuration.api_version_string
|
||||
local PS = dt.configuration.running_os == "windows" and "\\" or "/"
|
||||
local gettext = dt.gettext
|
||||
gettext.bindtextdomain(MODULE_NAME,
|
||||
@@ -391,6 +399,22 @@ local function install_module()
|
||||
end
|
||||
end
|
||||
|
||||
local function destroy()
|
||||
dt.gui.libs[MODULE_NAME].visible = false
|
||||
dt.destroy_event("photils", "mouse-over-image-changed")
|
||||
end
|
||||
|
||||
local function restart()
|
||||
dt.gui.libs[MODULE_NAME].visible = true
|
||||
dt.register_event("photils", "mouse-over-image-changed",
|
||||
PHOTILS.image_changed)
|
||||
end
|
||||
|
||||
local function show()
|
||||
dt.gui.libs[MODULE_NAME].visible = true
|
||||
end
|
||||
|
||||
|
||||
-- add a fix number of buttons
|
||||
for _ = 1, PHOTILS.per_page, 1 do
|
||||
local btn_tag = dt.new_widget("check_button") {
|
||||
@@ -454,7 +478,7 @@ dt.preferences.register(MODULE_NAME,
|
||||
"The embedded thumbnail could speedup the tag suggestion but can fail if the RAW file is not supported."),
|
||||
true)
|
||||
|
||||
dt.register_event("mouse-over-image-changed",
|
||||
dt.register_event("photils", "mouse-over-image-changed",
|
||||
PHOTILS.image_changed)
|
||||
|
||||
if dt.gui.current_view().id == "lighttable" then
|
||||
@@ -462,7 +486,7 @@ if dt.gui.current_view().id == "lighttable" then
|
||||
else
|
||||
if not PHOTILS.event_registered then
|
||||
dt.register_event(
|
||||
"view-changed",
|
||||
"photils", "view-changed",
|
||||
function(event, old_view, new_view)
|
||||
if new_view.name == "lighttable" and old_view.name == "darkroom" then
|
||||
install_module()
|
||||
@@ -473,3 +497,9 @@ else
|
||||
end
|
||||
end
|
||||
|
||||
script_data.destroy = destroy
|
||||
script_data.restart = restart
|
||||
script_data.destroy_method = "hide"
|
||||
script_data.show = show
|
||||
|
||||
return script_data
|
||||
|
||||
@@ -47,18 +47,23 @@ local dt = require "darktable"
|
||||
local du = require "lib/dtutils"
|
||||
local debug = require "darktable.debug"
|
||||
|
||||
du.check_min_api_version("7.0.0", "quicktag")
|
||||
|
||||
-- return data structure for script_manager
|
||||
|
||||
local script_data = {}
|
||||
|
||||
script_data.destroy = nil -- function to destory the script
|
||||
script_data.destroy_method = nil -- set to hide for libs since we can't destroy them commpletely yet, otherwise leave as nil
|
||||
script_data.restart = nil -- how to restart the (lib) script after it's been hidden - i.e. make it visible again
|
||||
|
||||
local qt = {}
|
||||
qt.module_installed = false
|
||||
qt.event_registered = false
|
||||
qt.widget_table = {}
|
||||
|
||||
|
||||
|
||||
local gettext = dt.gettext
|
||||
|
||||
du.check_min_api_version("3.0.0", "quicktag")
|
||||
local CURR_API_STRING = dt.configuration.api_version_string
|
||||
|
||||
-- Tell gettext where to find the .mo file translating messages for a particular domain
|
||||
gettext.bindtextdomain("quicktag",dt.configuration.config_dir.."/lua/locale/")
|
||||
|
||||
@@ -163,7 +168,7 @@ abbrevate_tags(quicktag_table)
|
||||
local button = {}
|
||||
|
||||
-- function to create buttons with tags as labels
|
||||
for j=1,qnr do
|
||||
for j = 1, qnr do
|
||||
button[#button+1] = dt.new_widget("button") {
|
||||
label = j..": "..quicktag_table[j],
|
||||
clicked_callback = function() tagattach(tostring(quicktag_table[j]),j) end}
|
||||
@@ -205,6 +210,29 @@ local function install_module()
|
||||
end
|
||||
end
|
||||
|
||||
local function destroy()
|
||||
dt.gui.libs["quicktag"].visible = false
|
||||
for i=1,qnr do
|
||||
dt.destroy_event("quicktag " .. tostring(i), "shortcut")
|
||||
end
|
||||
end
|
||||
|
||||
local function restart()
|
||||
dt.gui.libs["quicktag"].visible = true
|
||||
for i = 1 ,qnr do
|
||||
dt.register_event("quicktag", "shortcut",
|
||||
function(event, shortcut) tagattach(tostring(quicktag_table[i])) end,
|
||||
string.format(_("quicktag %i"),i))
|
||||
end
|
||||
end
|
||||
|
||||
local function show()
|
||||
dt.gui.libs["quicktag"].visible = true
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
update_quicktag_list()
|
||||
|
||||
local new_quicktag = dt.new_widget("entry"){
|
||||
@@ -257,7 +285,7 @@ if dt.gui.current_view().id == "lighttable" then
|
||||
else
|
||||
if not qt.event_registered then
|
||||
dt.register_event(
|
||||
"view-changed",
|
||||
"quicktag", "view-changed",
|
||||
function(event, old_view, new_view)
|
||||
if new_view.name == "lighttable" and old_view.name == "darkroom" then
|
||||
install_module()
|
||||
@@ -270,10 +298,17 @@ end
|
||||
|
||||
-- create shortcuts
|
||||
for i=1,qnr do
|
||||
dt.register_event("shortcut",
|
||||
dt.register_event("quicktag " .. tostring(i), "shortcut",
|
||||
function(event, shortcut) tagattach(tostring(quicktag_table[i])) end,
|
||||
string.format(_("quicktag %i"),i))
|
||||
end
|
||||
|
||||
script_data.destroy = destroy
|
||||
script_data.restart = restart
|
||||
script_data.destroy_method = "hide"
|
||||
script_data.show = show
|
||||
|
||||
return script_data
|
||||
|
||||
-- vim: shiftwidth=2 expandtab tabstop=2 cindent syntax=lua
|
||||
-- kate: tab-indents: off; indent-width 2; replace-tabs on; remove-trailing-space on;
|
||||
|
||||
@@ -42,8 +42,16 @@ local dt = require "darktable"
|
||||
local du = require "lib/dtutils"
|
||||
|
||||
-- added version check
|
||||
du.check_min_api_version("3.0.0", "rate_group")
|
||||
local CURR_API_STRING = dt.configuration.api_version_string
|
||||
du.check_min_api_version("7.0.0", "rate_group")
|
||||
|
||||
-- return data structure for script_manager
|
||||
|
||||
local script_data = {}
|
||||
|
||||
script_data.destroy = nil -- function to destory the script
|
||||
script_data.destroy_method = nil -- set to hide for libs since we can't destroy them commpletely yet, otherwise leave as nil
|
||||
script_data.restart = nil -- how to restart the (lib) script after it's been hidden - i.e. make it visible again
|
||||
script_data.show = nil -- only required for libs since the destroy_method only hides them
|
||||
|
||||
local function apply_rating(rating)
|
||||
local images = dt.gui.action_images
|
||||
@@ -60,37 +68,51 @@ local function apply_rating(rating)
|
||||
end
|
||||
end
|
||||
|
||||
dt.register_event("shortcut",
|
||||
local function destroy()
|
||||
dt.destroy_event("rg_reject", "shortcut")
|
||||
dt.destroy_event("rg0", "shortcut")
|
||||
dt.destroy_event("rg1", "shortcut")
|
||||
dt.destroy_event("rg2", "shortcut")
|
||||
dt.destroy_event("rg3", "shortcut")
|
||||
dt.destroy_event("rg4", "shortcut")
|
||||
dt.destroy_event("rg5", "shortcut")
|
||||
end
|
||||
|
||||
dt.register_event("rg_reject", "shortcut",
|
||||
function(event, shortcut)
|
||||
apply_rating(-1)
|
||||
end, "Reject group")
|
||||
|
||||
dt.register_event("shortcut",
|
||||
dt.register_event("rg0", "shortcut",
|
||||
function(event, shortcut)
|
||||
apply_rating(0)
|
||||
end, "Rate group 0")
|
||||
|
||||
dt.register_event("shortcut",
|
||||
dt.register_event("rg1", "shortcut",
|
||||
function(event, shortcut)
|
||||
apply_rating(1)
|
||||
end, "Rate group 1")
|
||||
|
||||
dt.register_event("shortcut",
|
||||
dt.register_event("rg2", "shortcut",
|
||||
function(event, shortcut)
|
||||
apply_rating(2)
|
||||
end, "Rate group 2")
|
||||
|
||||
dt.register_event("shortcut",
|
||||
dt.register_event("rg3", "shortcut",
|
||||
function(event, shortcut)
|
||||
apply_rating(3)
|
||||
end, "Rate group 3")
|
||||
|
||||
dt.register_event("shortcut",
|
||||
dt.register_event("rg4", "shortcut",
|
||||
function(event, shortcut)
|
||||
apply_rating(4)
|
||||
end, "Rate group 4")
|
||||
|
||||
dt.register_event("shortcut",
|
||||
dt.register_event("rg5", "shortcut",
|
||||
function(event, shortcut)
|
||||
apply_rating(5)
|
||||
end, "Rate group 5")
|
||||
|
||||
script_data.destroy = destroy
|
||||
|
||||
return script_data
|
||||
|
||||
@@ -33,8 +33,17 @@ local du = require "lib/dtutils"
|
||||
local debug = require "darktable.debug"
|
||||
|
||||
-- check API version
|
||||
du.check_min_api_version("3.0.0", "rename-tags")
|
||||
local CURR_API_STRING = darktable.configuration.api_version_string
|
||||
du.check_min_api_version("7.0.0", "rename-tags")
|
||||
du.deprecated("contrib/rename-tags.lua","darktable release 4.0")
|
||||
|
||||
-- return data structure for script_manager
|
||||
|
||||
local script_data = {}
|
||||
|
||||
script_data.destroy = nil -- function to destory the script
|
||||
script_data.destroy_method = nil -- set to hide for libs since we can't destroy them commpletely yet, otherwise leave as nil
|
||||
script_data.restart = nil -- how to restart the (lib) script after it's been hidden - i.e. make it visible again
|
||||
script_data.show = nil -- only required for libs since the destroy_method only hides them
|
||||
|
||||
local rt = {}
|
||||
rt.module_installed = false
|
||||
@@ -111,6 +120,14 @@ local function install_module()
|
||||
end
|
||||
end
|
||||
|
||||
local function destroy()
|
||||
darktable.gui.libs["rename_tags"].visible = false
|
||||
end
|
||||
|
||||
local function restart()
|
||||
darktable.gui.libs["rename_tags"].visible = true
|
||||
end
|
||||
|
||||
-- GUI
|
||||
local old_widget = darktable.new_widget ("box") {
|
||||
orientation = "horizontal",
|
||||
@@ -137,7 +154,7 @@ if darktable.gui.current_view().id == "lighttable" then
|
||||
else
|
||||
if not rt.event_registered then
|
||||
darktable.register_event(
|
||||
"view-changed",
|
||||
"rename_tags", "view-changed",
|
||||
function(event, old_view, new_view)
|
||||
if new_view.name == "lighttable" and old_view.name == "darkroom" then
|
||||
install_module()
|
||||
@@ -148,4 +165,11 @@ else
|
||||
end
|
||||
end
|
||||
|
||||
script_data.destroy = destroy
|
||||
script_data.restart = restart
|
||||
script_data.destroy_method = "hide"
|
||||
script_data.show = restart
|
||||
|
||||
return script_data
|
||||
|
||||
|
||||
|
||||
353
contrib/rename_images.lua
Normal file
353
contrib/rename_images.lua
Normal file
@@ -0,0 +1,353 @@
|
||||
--[[
|
||||
|
||||
rename.lua - rename image file(s)
|
||||
|
||||
Copyright (C) 2020, 2021 Bill Ferguson <wpferguson@gmail.com>.
|
||||
|
||||
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/>.
|
||||
]]
|
||||
--[[
|
||||
rename - rename an image file or files
|
||||
|
||||
This shortcut resets the GPS information to that contained within
|
||||
the image file. If no GPS info is in the image file, the GPS data
|
||||
is cleared.
|
||||
|
||||
USAGE
|
||||
* require this script from your luarc file or start it from script_manager
|
||||
* select an image or images
|
||||
* enter a renaming pattern
|
||||
* click the button to rename the files
|
||||
|
||||
BUGS, COMMENTS, SUGGESTIONS
|
||||
* Send to Bill Ferguson, wpferguson@gmail.com
|
||||
|
||||
CHANGES
|
||||
|
||||
TODO
|
||||
* Add pattern builder
|
||||
* Add new name preview
|
||||
]]
|
||||
|
||||
local dt = require "darktable"
|
||||
local du = require "lib/dtutils"
|
||||
local df = require "lib/dtutils.file"
|
||||
|
||||
du.check_min_api_version("7.0.0", "rename_images")
|
||||
|
||||
local gettext = dt.gettext
|
||||
|
||||
-- Tell gettext where to find the .mo file translating messages for a particular domain
|
||||
gettext.bindtextdomain("rename_images",dt.configuration.config_dir.."/lua/locale/")
|
||||
|
||||
local function _(msgid)
|
||||
return gettext.dgettext("rename_images", msgid)
|
||||
end
|
||||
|
||||
-- namespace variable
|
||||
local rename = {
|
||||
presets = {},
|
||||
substitutes = {},
|
||||
placeholders = {"ROLL_NAME","FILE_FOLDER","FILE_NAME","FILE_EXTENSION","ID","VERSION","SEQUENCE","YEAR","MONTH","DAY",
|
||||
"HOUR","MINUTE","SECOND","EXIF_YEAR","EXIF_MONTH","EXIF_DAY","EXIF_HOUR","EXIF_MINUTE","EXIF_SECOND",
|
||||
"STARS","LABELS","MAKER","MODEL","TITLE","CREATOR","PUBLISHER","RIGHTS","USERNAME","PICTURES_FOLDER",
|
||||
"HOME","DESKTOP","EXIF_ISO","EXIF_EXPOSURE","EXIF_EXPOSURE_BIAS","EXIF_APERTURE","EXIF_FOCUS_DISTANCE",
|
||||
"EXIF_FOCAL_LENGTH","LONGITUDE","LATITUDE","ELEVATION","LENS","DESCRIPTION","EXIF_CROP"},
|
||||
widgets = {},
|
||||
}
|
||||
rename.module_installed = false
|
||||
rename.event_registered = false
|
||||
|
||||
-- script_manager integration
|
||||
local script_data = {}
|
||||
|
||||
script_data.destroy = nil -- function to destory the script
|
||||
script_data.destroy_method = nil -- set to hide for libs since we can't destroy them commpletely yet, otherwise leave as nil
|
||||
script_data.restart = nil -- how to restart the (lib) script after it's been hidden - i.e. make it visible again
|
||||
script_data.show = nil -- only required for libs since the destroy_method only hides them
|
||||
|
||||
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
-- C O N S T A N T S
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
||||
local MODULE_NAME = "rename_images"
|
||||
local PS = dt.configuration.running_os == "windows" and "\\" or "/"
|
||||
local USER = os.getenv("USERNAME")
|
||||
local HOME = os.getenv(dt.configuration.running_os == "windows" and "HOMEPATH" or "HOME")
|
||||
local PICTURES = HOME .. PS .. dt.configuration.running_os == "windows" and "My Pictures" or "Pictures"
|
||||
local DESKTOP = HOME .. PS .. "Desktop"
|
||||
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
-- F U N C T I O N S
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
||||
local function build_substitution_list(image, sequence, datetime, username, pic_folder, home, desktop)
|
||||
-- build the argument substitution list from each image
|
||||
-- local datetime = os.date("*t")
|
||||
local colorlabels = {}
|
||||
if image.red then table.insert(colorlabels, "red") end
|
||||
if image.yellow then table.insert(colorlabels, "yellow") end
|
||||
if image.green then table.insert(colorlabels, "green") end
|
||||
if image.blue then table.insert(colorlabels, "blue") end
|
||||
if image.purple then table.insert(colorlabels, "purple") end
|
||||
local labels = #colorlabels == 1 and colorlabels[1] or du.join(colorlabels, ",")
|
||||
local eyear,emon,eday,ehour,emin,esec = string.match(image.exif_datetime_taken, "(%d-):(%d-):(%d-) (%d-):(%d-):(%d-)$")
|
||||
local replacements = {image.film,
|
||||
image.path,
|
||||
df.get_filename(image.filename),
|
||||
string.upper(df.get_filetype(image.filename)),
|
||||
image.id,image.duplicate_index,
|
||||
string.format("%04d", sequence),
|
||||
datetime.year,
|
||||
string.format("%02d", datetime.month),
|
||||
string.format("%02d", datetime.day),
|
||||
string.format("%02d", datetime.hour),
|
||||
string.format("%02d", datetime.min),
|
||||
string.format("%02d", datetime.sec),
|
||||
eyear,
|
||||
emon,
|
||||
eday,
|
||||
ehour,
|
||||
emin,
|
||||
esec,
|
||||
image.rating,
|
||||
labels,
|
||||
image.exif_maker,
|
||||
image.exif_model,
|
||||
image.title,
|
||||
image.creator,
|
||||
image.publisher,
|
||||
image.rights,
|
||||
username,
|
||||
pic_folder,
|
||||
home,
|
||||
desktop,
|
||||
image.exif_iso,
|
||||
image.exif_exposure,
|
||||
image.exif_exposure_bias,
|
||||
image.exif_aperture,
|
||||
image.exif_focus_distance,
|
||||
image.exif_focal_length,
|
||||
image.longitude,
|
||||
image.latitude,
|
||||
image.elevation,
|
||||
image.exif_lens,
|
||||
image.description,
|
||||
image.exif_crop
|
||||
}
|
||||
|
||||
for i=1,#rename.placeholders,1 do rename.substitutes[rename.placeholders[i]] = replacements[i] end
|
||||
end
|
||||
|
||||
local function substitute_list(str)
|
||||
-- replace the substitution variables in a string
|
||||
for match in string.gmatch(str, "%$%(.-%)") do
|
||||
local var = string.match(match, "%$%((.-)%)")
|
||||
if rename.substitutes[var] then
|
||||
str = string.gsub(str, "%$%("..var.."%)", rename.substitutes[var])
|
||||
else
|
||||
dt.print_error(_("unrecognized variable " .. var))
|
||||
dt.print(_("unknown variable " .. var .. ", aborting..."))
|
||||
return -1
|
||||
end
|
||||
end
|
||||
return str
|
||||
end
|
||||
|
||||
local function clear_substitute_list()
|
||||
for i=1,#rename.placeholders,1 do rename.substitutes[rename.placeholders[i]] = nil end
|
||||
end
|
||||
|
||||
local function stop_job(job)
|
||||
job.valid = false
|
||||
end
|
||||
|
||||
local function install_module()
|
||||
if not rename.module_installed then
|
||||
dt.register_lib(
|
||||
MODULE_NAME,
|
||||
_("rename images"),
|
||||
true,
|
||||
true,
|
||||
{[dt.gui.views.lighttable] = {"DT_UI_CONTAINER_PANEL_RIGHT_CENTER",700}},
|
||||
dt.new_widget("box"){
|
||||
orientation = "vertical",
|
||||
rename.widgets.pattern,
|
||||
rename.widgets.button,
|
||||
},
|
||||
nil,
|
||||
nil
|
||||
)
|
||||
rename.module_installed = true
|
||||
end
|
||||
end
|
||||
|
||||
local function destroy()
|
||||
dt.gui.libs[MODULE_NAME].visible = false
|
||||
end
|
||||
|
||||
local function restart()
|
||||
dt.gui.libs[MODULE_NAME].visible = true
|
||||
end
|
||||
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
-- M A I N
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
||||
local function do_rename(images)
|
||||
if #images > 0 then
|
||||
local pattern = rename.widgets.pattern.text
|
||||
dt.preferences.write(MODULE_NAME, "pattern", "string", pattern)
|
||||
dt.print_log(_("pattern is " .. pattern))
|
||||
if string.len(pattern) > 0 then
|
||||
local datetime = os.date("*t")
|
||||
|
||||
local job = dt.gui.create_job(_("renaming images"), true, stop_job)
|
||||
for i, image in ipairs(images) do
|
||||
if job.valid then
|
||||
job.percent = i / #images
|
||||
build_substitution_list(image, i, datetime, USER, PICTURES, HOME, DESKTOP)
|
||||
local new_name = substitute_list(pattern)
|
||||
if new_name == -1 then
|
||||
dt.print(_("unable to do variable substitution, exiting..."))
|
||||
stop_job(job)
|
||||
return
|
||||
end
|
||||
clear_substitute_list()
|
||||
local args = {}
|
||||
local path = string.sub(df.get_path(new_name), 1, -2)
|
||||
if string.len(path) == 0 then
|
||||
path = image.path
|
||||
end
|
||||
local filename = df.get_filename(new_name)
|
||||
local filmname = image.path
|
||||
if path ~= image.path then
|
||||
if not df.check_if_file_exists(df.sanitize_filename(path)) then
|
||||
df.mkdir(df.sanitize_filename(path))
|
||||
end
|
||||
filmname = path
|
||||
end
|
||||
args[1] = dt.films.new(filmname)
|
||||
args[2] = image
|
||||
if filename ~= image.filename then
|
||||
args[3] = filename
|
||||
end
|
||||
dt.database.move_image(table.unpack(args))
|
||||
end
|
||||
end
|
||||
stop_job(job)
|
||||
local collect_rules = dt.gui.libs.collect.filter()
|
||||
dt.gui.libs.collect.filter(collect_rules)
|
||||
dt.print(_("renamed " .. #images .. " images"))
|
||||
else -- pattern length
|
||||
dt.print_error("no pattern supplied, returning...")
|
||||
dt.print(_("please enter the new name or pattern"))
|
||||
end
|
||||
else -- image count
|
||||
dt.print_error("no images selected, returning...")
|
||||
dt.print(_("please select some images and try again"))
|
||||
end
|
||||
end
|
||||
|
||||
local function reset_callback()
|
||||
rename.widgets.pattern.text = ""
|
||||
end
|
||||
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
-- W I D G E T S
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
||||
rename.widgets.pattern = dt.new_widget("entry"){
|
||||
tooltip = _("$(ROLL_NAME) - film roll name\n") ..
|
||||
_("$(FILE_FOLDER) - image file folder\n") ..
|
||||
_("$(FILE_NAME) - image file name\n") ..
|
||||
_("$(FILE_EXTENSION) - image file extension\n") ..
|
||||
_("$(ID) - image id\n") ..
|
||||
_("$(VERSION) - version number\n") ..
|
||||
_("$(SEQUENCE) - sequence number of selection\n") ..
|
||||
_("$(YEAR) - current year\n") ..
|
||||
_("$(MONTH) - current month\n") ..
|
||||
_("$(DAY) - current day\n") ..
|
||||
_("$(HOUR) - current hour\n") ..
|
||||
_("$(MINUTE) - current minute\n") ..
|
||||
_("$(SECOND) - current second\n") ..
|
||||
_("$(EXIF_YEAR) - EXIF year\n") ..
|
||||
_("$(EXIF_MONTH) - EXIF month\n") ..
|
||||
_("$(EXIF_DAY) - EXIF day\n") ..
|
||||
_("$(EXIF_HOUR) - EXIF hour\n") ..
|
||||
_("$(EXIF_MINUTE) - EXIF minute\n") ..
|
||||
_("$(EXIF_SECOND) - EXIF seconds\n") ..
|
||||
_("$(EXIF_ISO) - EXIF ISO\n") ..
|
||||
_("$(EXIF_EXPOSURE) - EXIF exposure\n") ..
|
||||
_("$(EXIF_EXPOSURE_BIAS) - EXIF exposure bias\n") ..
|
||||
_("$(EXIF_APERTURE) - EXIF aperture\n") ..
|
||||
_("$(EXIF_FOCAL_LENGTH) - EXIF focal length\n") ..
|
||||
_("$(EXIF_FOCUS_DISTANCE) - EXIF focus distance\n") ..
|
||||
_("$(EXIF_CROP) - EXIF crop\n") ..
|
||||
_("$(LONGITUDE) - longitude\n") ..
|
||||
_("$(LATITUDE) - latitude\n") ..
|
||||
_("$(ELEVATION) - elevation\n") ..
|
||||
_("$(STARS) - star rating\n") ..
|
||||
_("$(LABELS) - color labels\n") ..
|
||||
_("$(MAKER) - camera maker\n") ..
|
||||
_("$(MODEL) - camera model\n") ..
|
||||
_("$(LENS) - lens\n") ..
|
||||
_("$(TITLE) - title from metadata\n") ..
|
||||
_("$(DESCRIPTION) - description from metadata\n") ..
|
||||
_("$(CREATOR) - creator from metadata\n") ..
|
||||
_("$(PUBLISHER) - publisher from metadata\n") ..
|
||||
_("$(RIGHTS) - rights from metadata\n") ..
|
||||
_("$(USERNAME) - username\n") ..
|
||||
_("$(PICTURES_FOLDER) - pictures folder\n") ..
|
||||
_("$(HOME) - user's home directory\n") ..
|
||||
_("$(DESKTOP) - desktop directory"),
|
||||
placeholder = _("enter pattern $(FILE_FOLDER)/$(FILE_NAME)"),
|
||||
text = ""
|
||||
}
|
||||
|
||||
local pattern_pref = dt.preferences.read(MODULE_NAME, "pattern", "string")
|
||||
if pattern_pref then
|
||||
rename.widgets.pattern.text = pattern_pref
|
||||
end
|
||||
|
||||
rename.widgets.button = dt.new_widget("button"){
|
||||
label = _("rename"),
|
||||
clicked_callback = function(this)
|
||||
do_rename(dt.gui.action_images)
|
||||
end
|
||||
}
|
||||
|
||||
if dt.gui.current_view().id == "lighttable" then
|
||||
install_module()
|
||||
else
|
||||
if not rename.event_registered then
|
||||
dt.register_event(
|
||||
"rename_images", "view-changed",
|
||||
function(event, old_view, new_view)
|
||||
if new_view.name == "lighttable" and old_view.name == "darkroom" then
|
||||
install_module()
|
||||
end
|
||||
end
|
||||
)
|
||||
rename.event_registered = true
|
||||
end
|
||||
end
|
||||
|
||||
script_data.destroy = destroy
|
||||
script_data.restart = restart
|
||||
script_data.destroy_method = "hide"
|
||||
script_data.show = restart
|
||||
|
||||
return script_data
|
||||
77
contrib/select_non_existing.lua
Normal file
77
contrib/select_non_existing.lua
Normal file
@@ -0,0 +1,77 @@
|
||||
--[[
|
||||
This file is part of darktable,
|
||||
copyright (c) 2023 Dirk Dittmar
|
||||
|
||||
darktable 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.
|
||||
darktable 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 darktable. If not, see <http://www.gnu.org/licenses/>.
|
||||
]]
|
||||
--[[
|
||||
Enable selection of non-existing images in the the currently worked on images, e.g. the ones selected by the collection module.
|
||||
]]
|
||||
|
||||
local dt = require "darktable"
|
||||
local du = require "lib/dtutils"
|
||||
local df = require "lib/dtutils.file"
|
||||
|
||||
-- module name
|
||||
local MODULE = "select_non_existing"
|
||||
|
||||
du.check_min_api_version("9.1.0", MODULE)
|
||||
|
||||
-- figure out the path separator
|
||||
local PS = dt.configuration.running_os == "windows" and "\\" or "/"
|
||||
|
||||
local gettext = dt.gettext
|
||||
gettext.bindtextdomain(MODULE, dt.configuration.config_dir..PS.."lua"..PS.."locale"..PS)
|
||||
|
||||
local function _(msgid)
|
||||
return gettext.dgettext(MODULE, msgid)
|
||||
end
|
||||
|
||||
local function stop_job(job)
|
||||
job.valid = false
|
||||
end
|
||||
|
||||
local function select_nonexisting_images(event, images)
|
||||
local selection = {}
|
||||
|
||||
local job = dt.gui.create_job(_("select non existing images"), true, stop_job)
|
||||
for key,image in ipairs(images) do
|
||||
if(job.valid) then
|
||||
job.percent = (key - 1)/#images
|
||||
local filepath = image.path..PS..image.filename
|
||||
local file_exists = df.test_file(filepath, "e")
|
||||
dt.print_log(filepath.." exists? => "..tostring(file_exists))
|
||||
if (not file_exists) then
|
||||
table.insert(selection, image)
|
||||
end
|
||||
else
|
||||
break
|
||||
end
|
||||
end
|
||||
stop_job(job)
|
||||
|
||||
return selection
|
||||
end
|
||||
|
||||
local function destroy()
|
||||
dt.gui.libs.select.destroy_selection(MODULE)
|
||||
end
|
||||
|
||||
dt.gui.libs.select.register_selection(
|
||||
MODULE,
|
||||
_("select non existing"),
|
||||
select_nonexisting_images,
|
||||
_("select all non-existing images in the current images"))
|
||||
|
||||
local script_data = {}
|
||||
script_data.destroy = destroy
|
||||
return script_data
|
||||
@@ -22,11 +22,19 @@ local dt = require "darktable"
|
||||
local du = require "lib/dtutils"
|
||||
local gettext = dt.gettext
|
||||
|
||||
du.check_min_api_version("3.0.0", "select_untagged")
|
||||
du.check_min_api_version("7.0.0", "select_untagged")
|
||||
|
||||
-- return data structure for script_manager
|
||||
|
||||
local script_data = {}
|
||||
|
||||
script_data.destroy = nil -- function to destory the script
|
||||
script_data.destroy_method = nil -- set to hide for libs since we can't destroy them commpletely yet, otherwise leave as nil
|
||||
script_data.restart = nil -- how to restart the (lib) script after it's been hidden - i.e. make it visible again
|
||||
script_data.show = nil -- only required for libs since the destroy_method only hides them
|
||||
|
||||
-- Tell gettext where to find the .mo file translating messages for a particular domain
|
||||
gettext.bindtextdomain("select_untagged",dt.configuration.config_dir.."/lua/locale/")
|
||||
local CURR_API_STRING = dt.configuration.api_version_string
|
||||
|
||||
local function _(msgid)
|
||||
return gettext.dgettext("select_untagged", msgid)
|
||||
@@ -64,7 +72,15 @@ local function select_untagged_images(event, images)
|
||||
return selection
|
||||
end
|
||||
|
||||
local function destroy()
|
||||
dt.gui.libs.select.destroy_selection("select_untagged")
|
||||
end
|
||||
|
||||
dt.gui.libs.select.register_selection(
|
||||
_("select untagged"),
|
||||
"select_untagged", _("select untagged"),
|
||||
select_untagged_images,
|
||||
_("select all images containing no tags or only tags added by darktable"))
|
||||
|
||||
script_data.destroy = destroy
|
||||
|
||||
return script_data
|
||||
|
||||
@@ -27,12 +27,18 @@ USAGE
|
||||
local dt = require "darktable"
|
||||
local du = require "lib/dtutils"
|
||||
local df = require "lib/dtutils.file"
|
||||
|
||||
local gettext = dt.gettext
|
||||
|
||||
du.check_min_api_version("2.0.2", "slideshowMusic")
|
||||
du.check_min_api_version("7.0.0", "slideshowMusic")
|
||||
|
||||
local CURR_API_STRING = dt.configuration.api_version_string
|
||||
-- return data structure for script_manager
|
||||
|
||||
local script_data = {}
|
||||
|
||||
script_data.destroy = nil -- function to destory the script
|
||||
script_data.destroy_method = nil -- set to hide for libs since we can't destroy them commpletely yet, otherwise leave as nil
|
||||
script_data.restart = nil -- how to restart the (lib) script after it's been hidden - i.e. make it visible again
|
||||
script_data.show = nil -- only required for libs since the destroy_method only hides them
|
||||
|
||||
-- Tell gettext where to find the .mo file translating messages for a particular domain
|
||||
gettext.bindtextdomain("slideshowMusic",dt.configuration.config_dir.."/lua/locale/")
|
||||
@@ -70,6 +76,12 @@ local function playSlideshowMusic(_, old_view, new_view)
|
||||
end
|
||||
end
|
||||
|
||||
function destroy()
|
||||
dt.destroy_event("slideshow_music", "view-changed")
|
||||
dt.preferences.destroy("slideshowMusic", "SlideshowMusic")
|
||||
dt.preferences.destroy("slideshowMusic", "PlaySlideshowMusic")
|
||||
end
|
||||
|
||||
-- Preferences
|
||||
dt.preferences.register("slideshowMusic", "SlideshowMusic", "file", _("Slideshow background music file"), "", "")
|
||||
dt.preferences.register("slideshowMusic",
|
||||
@@ -79,5 +91,9 @@ dt.preferences.register("slideshowMusic",
|
||||
_("Plays music with rhythmbox if a slideshow starts"),
|
||||
true)
|
||||
-- Register
|
||||
dt.register_event("view-changed",
|
||||
dt.register_event("slideshow_music", "view-changed",
|
||||
playSlideshowMusic)
|
||||
|
||||
script_data.destroy = destroy
|
||||
|
||||
return script_data
|
||||
|
||||
@@ -78,12 +78,20 @@ local dtutils_file = require("lib/dtutils.file")
|
||||
local dtutils_system = require("lib/dtutils.system")
|
||||
|
||||
local LIB_ID = "transfer_hierarchy"
|
||||
dtutils.check_min_api_version("5.0.0", LIB_ID)
|
||||
dtutils.check_min_api_version("7.0.0", LIB_ID)
|
||||
|
||||
-- return data structure for script_manager
|
||||
|
||||
local script_data = {}
|
||||
|
||||
script_data.destroy = nil -- function to destory the script
|
||||
script_data.destroy_method = nil -- set to hide for libs since we can't destroy them commpletely yet, otherwise leave as nil
|
||||
script_data.restart = nil -- how to restart the (lib) script after it's been hidden - i.e. make it visible again
|
||||
script_data.show = nil -- only required for libs since the destroy_method only hides them
|
||||
|
||||
local MKDIR_COMMAND = darktable.configuration.running_os == "windows" and "mkdir " or "mkdir -p "
|
||||
local PATH_SEPARATOR = darktable.configuration.running_os == "windows" and "\\\\" or "/"
|
||||
local PATH_SEGMENT_REGEX = "(" .. PATH_SEPARATOR .. "?)([^" .. PATH_SEPARATOR .. "]+)"
|
||||
local CURR_API_STRING = darktable.configuration.api_version_string
|
||||
|
||||
unpack = unpack or table.unpack
|
||||
gmatch = string.gfind or string.gmatch
|
||||
@@ -302,6 +310,13 @@ local function doCopy()
|
||||
doTransfer(darktable.database.copy_image)
|
||||
end
|
||||
|
||||
local function destroy()
|
||||
darktable.gui.libs[LIB_ID].visible = false
|
||||
end
|
||||
|
||||
local function restart()
|
||||
darktable.gui.libs[LIB_ID].visible = true
|
||||
end
|
||||
|
||||
|
||||
|
||||
@@ -367,7 +382,7 @@ if darktable.gui.current_view().id == "lighttable" then
|
||||
else
|
||||
if not th.event_registered then
|
||||
darktable.register_event(
|
||||
"view-changed",
|
||||
LIB_ID, "view-changed",
|
||||
function(event, old_view, new_view)
|
||||
if new_view.name == "lighttable" and old_view.name == "darkroom" then
|
||||
install_module()
|
||||
@@ -377,3 +392,11 @@ else
|
||||
th.event_registered = true
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
script_data.destroy = destroy
|
||||
script_data.restart = restart
|
||||
script_data.destroy_method = "hide"
|
||||
script_data.show = restart
|
||||
|
||||
return script_data
|
||||
@@ -39,7 +39,16 @@ local df = require "lib/dtutils.file"
|
||||
local dsys = require "lib/dtutils.system"
|
||||
local gettext = dt.gettext
|
||||
|
||||
du.check_min_api_version("5.0.0")
|
||||
du.check_min_api_version("7.0.0", "video_ffmpeg")
|
||||
|
||||
-- return data structure for script_manager
|
||||
|
||||
local script_data = {}
|
||||
|
||||
script_data.destroy = nil -- function to destory the script
|
||||
script_data.destroy_method = nil -- set to hide for libs since we can't destroy them commpletely yet, otherwise leave as nil
|
||||
script_data.restart = nil -- how to restart the (lib) script after it's been hidden - i.e. make it visible again
|
||||
script_data.show = nil -- only required for libs since the destroy_method only hides them
|
||||
|
||||
local MODULE_NAME = "video_ffmpeg"
|
||||
|
||||
@@ -277,7 +286,7 @@ local defaultVideoDir = ''
|
||||
if dt.configuration.running_os == "windows" then
|
||||
defaultVideoDir = os.getenv("USERPROFILE")..PS .."videos"
|
||||
elseif dt.configuration.running_os == "macos" then
|
||||
defaultVideoDir = os.getenv("home")..PS.."Videos"
|
||||
defaultVideoDir = os.getenv("HOME")..PS.."Videos"
|
||||
else
|
||||
local handle = io.popen("xdg-user-dir VIDEOS")
|
||||
defaultVideoDir = handle:read()
|
||||
@@ -448,6 +457,12 @@ local function finalize_export(storage, images_table, extra_data)
|
||||
df.rmdir(df.sanitize_filename(tmp_dir))
|
||||
end
|
||||
|
||||
-- script_manager integration
|
||||
|
||||
local function destroy()
|
||||
dt.destroy_storage("module_video_ffmpeg")
|
||||
end
|
||||
|
||||
dt.register_storage(
|
||||
"module_video_ffmpeg",
|
||||
_(MODULE_NAME),
|
||||
@@ -458,3 +473,8 @@ dt.register_storage(
|
||||
module_widget
|
||||
)
|
||||
|
||||
-- script_manager integration
|
||||
|
||||
script_data.destroy = destroy
|
||||
|
||||
return script_data
|
||||
|
||||
@@ -23,5 +23,19 @@ USAGE
|
||||
]]
|
||||
local dt = require "darktable"
|
||||
|
||||
-- script_manager integration to allow a script to be removed
|
||||
-- without restarting darktable
|
||||
local function destroy()
|
||||
-- nothing to destroy
|
||||
end
|
||||
|
||||
local result = dt.configuration.api_version_string
|
||||
dt.print_error("API Version: "..result)
|
||||
|
||||
-- set the destroy routine so that script_manager can call it when
|
||||
-- it's time to destroy the script and then return the data to
|
||||
-- script_manager
|
||||
local script_data = {}
|
||||
script_data.destroy = destroy
|
||||
|
||||
return script_data
|
||||
|
||||
@@ -42,6 +42,12 @@ local du = require "lib/dtutils"
|
||||
|
||||
du.check_min_api_version("5.0.2", "darkroom_mode") -- darktable 3.0
|
||||
|
||||
-- script_manager integration to allow a script to be removed
|
||||
-- without restarting darktable
|
||||
local function destroy()
|
||||
-- nothing to destroy
|
||||
end
|
||||
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
-- C O N S T A N T S
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
@@ -70,6 +76,16 @@ local sleep = dt.control.sleep
|
||||
|
||||
local current_view = dt.gui.current_view()
|
||||
|
||||
-- check that there is an image selected, otherwise we can't activate darkroom viewe
|
||||
|
||||
local images = dt.gui.action_images
|
||||
dt.print_log(#images .. " images selected")
|
||||
if not images or #images == 0 then
|
||||
dt.print_log("no images selected, creating selection")
|
||||
dt.print_log("using image " .. dt.collection[1].filename)
|
||||
dt.gui.selection({dt.collection[1]})
|
||||
end
|
||||
|
||||
-- enter darkroom view
|
||||
|
||||
dt.gui.current_view(dt.gui.views.darkroom)
|
||||
@@ -96,3 +112,10 @@ dt.print(_("Restoring view"))
|
||||
sleep(1500)
|
||||
dt.gui.current_view(current_view)
|
||||
|
||||
-- set the destroy routine so that script_manager can call it when
|
||||
-- it's time to destroy the script and then return the data to
|
||||
-- script_manager
|
||||
local script_data = {}
|
||||
script_data.destroy = destroy
|
||||
|
||||
return script_data
|
||||
|
||||
@@ -58,6 +58,12 @@ local du = require "lib/dtutils"
|
||||
--check API version
|
||||
du.check_min_api_version("3.0.0", "gettextExample")
|
||||
|
||||
-- script_manager integration to allow a script to be removed
|
||||
-- without restarting darktable
|
||||
local function destroy()
|
||||
-- nothing to destroy
|
||||
end
|
||||
|
||||
-- Not translated Text
|
||||
dt.print_error("Hello World!")
|
||||
|
||||
@@ -77,3 +83,11 @@ local function _(msgid)
|
||||
return gettext.dgettext("gettextExample", msgid)
|
||||
end
|
||||
dt.print_error(_('Hello World!'))
|
||||
|
||||
-- set the destroy routine so that script_manager can call it when
|
||||
-- it's time to destroy the script and then return the data to
|
||||
-- script_manager
|
||||
local script_data = {}
|
||||
script_data.destroy = destroy
|
||||
|
||||
return script_data
|
||||
|
||||
105
examples/gui_action.lua
Normal file
105
examples/gui_action.lua
Normal file
@@ -0,0 +1,105 @@
|
||||
local dt = require "darktable"
|
||||
|
||||
local NaN = 0/0
|
||||
|
||||
local wg = {}
|
||||
|
||||
wg.action = dt.new_widget("entry"){
|
||||
text = "lib/filter/view",
|
||||
placeholder = "action path",
|
||||
tooltip = "enter the full path of an action, for example 'lib/filter/view'"
|
||||
}
|
||||
|
||||
wg.instance = dt.new_widget("combobox"){
|
||||
label = "instance",
|
||||
tooltip = "the instance of an image processing module to execute action on",
|
||||
"0", "+1", "-1", "+2", "-2", "+3", "-3", "+4", "-4", "+5", "-5", "+6", "-6", "+7", "-7", "+8", "-8", "+9", "-9"
|
||||
}
|
||||
|
||||
wg.element = dt.new_widget("entry"){
|
||||
text = "",
|
||||
placeholder = "action element",
|
||||
tooltip = "enter the element of an action, for example 'selection', or leave empty for default"
|
||||
}
|
||||
|
||||
wg.effect = dt.new_widget("entry"){
|
||||
text = "next",
|
||||
placeholder = "action effect",
|
||||
tooltip = "enter the effect of an action, for example 'next', or leave empty for default"
|
||||
}
|
||||
|
||||
wg.speed = dt.new_widget("entry"){
|
||||
text = "1",
|
||||
placeholder = "action speed",
|
||||
tooltip = "enter the speed to use in action execution, or leave empty to only read state"
|
||||
}
|
||||
|
||||
wg.check = dt.new_widget("check_button"){
|
||||
label = 'perform action',
|
||||
tooltip = 'perform action or only read return',
|
||||
clicked_callback = function()
|
||||
wg.speed.sensitive = wg.check.value
|
||||
end,
|
||||
value = true
|
||||
}
|
||||
|
||||
wg.return_value = dt.new_widget("entry"){
|
||||
text = "",
|
||||
sensitive = false
|
||||
}
|
||||
|
||||
dt.register_lib(
|
||||
"execute_action", -- Module name
|
||||
"execute gui actions", -- name
|
||||
true, -- expandable
|
||||
false, -- resetable
|
||||
{[dt.gui.views.lighttable] = {"DT_UI_CONTAINER_PANEL_LEFT_CENTER", 100},
|
||||
[dt.gui.views.darkroom] = {"DT_UI_CONTAINER_PANEL_LEFT_CENTER", 100}},
|
||||
dt.new_widget("box")
|
||||
{
|
||||
orientation = "vertical",
|
||||
|
||||
dt.new_widget("box")
|
||||
{
|
||||
orientation = "horizontal",
|
||||
dt.new_widget("label"){label = "action path", halign = "start"},
|
||||
wg.action
|
||||
},
|
||||
wg.instance,
|
||||
dt.new_widget("box")
|
||||
{
|
||||
orientation = "horizontal",
|
||||
dt.new_widget("label"){label = "element", halign = "start"},
|
||||
wg.element
|
||||
},
|
||||
dt.new_widget("box")
|
||||
{
|
||||
orientation = "horizontal",
|
||||
dt.new_widget("label"){label = "effect", halign = "start"},
|
||||
wg.effect
|
||||
},
|
||||
wg.check,
|
||||
dt.new_widget("box")
|
||||
{
|
||||
orientation = "horizontal",
|
||||
dt.new_widget("label"){label = "speed", halign = "start"},
|
||||
wg.speed
|
||||
},
|
||||
dt.new_widget("button")
|
||||
{
|
||||
label = "execute action",
|
||||
tooltip = "execute the action specified in the fields above",
|
||||
clicked_callback = function(_)
|
||||
local sp = NaN
|
||||
if wg.check.value then sp = wg.speed.text end
|
||||
wg.return_value.text = dt.gui.action(wg.action.text, wg.instance.value, wg.element.text, wg.effect.text, sp)
|
||||
end
|
||||
},
|
||||
dt.new_widget("box")
|
||||
{
|
||||
orientation = "horizontal",
|
||||
dt.new_widget("label"){label = "return value:", halign = "start"},
|
||||
wg.return_value
|
||||
},
|
||||
}
|
||||
)
|
||||
@@ -31,7 +31,20 @@ local du = require "lib/dtutils"
|
||||
|
||||
du.check_min_api_version("2.0.0", "hello_world")
|
||||
|
||||
-- script_manager integration to allow a script to be removed
|
||||
-- without restarting darktable
|
||||
local function destroy()
|
||||
-- nothing to destroy
|
||||
end
|
||||
|
||||
dt.print("hello, world")
|
||||
|
||||
-- set the destroy routine so that script_manager can call it when
|
||||
-- it's time to destroy the script and then return the data to
|
||||
-- script_manager
|
||||
local script_data = {}
|
||||
script_data.destroy = destroy
|
||||
|
||||
return script_data
|
||||
--
|
||||
-- vim: shiftwidth=2 expandtab tabstop=2 cindent syntax=lua
|
||||
|
||||
@@ -50,6 +50,12 @@ du.check_min_api_version("5.0.2", "lighttable_demo") -- darktable 3.0
|
||||
local MODULE_NAME = "lighttable"
|
||||
local PS = dt.configuration.running_os == "windows" and "\\" or "/"
|
||||
|
||||
-- script_manager integration to allow a script to be removed
|
||||
-- without restarting darktable
|
||||
local function destroy()
|
||||
-- nothing to destroy
|
||||
end
|
||||
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
-- T R A N S L A T I O N S
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
@@ -75,6 +81,7 @@ local layouts = {
|
||||
"DT_LIGHTTABLE_LAYOUT_ZOOMABLE",
|
||||
"DT_LIGHTTABLE_LAYOUT_FILEMANAGER",
|
||||
"DT_LIGHTTABLE_LAYOUT_CULLING",
|
||||
"DT_LIGHTTABLE_LAYOUT_CULLING_DYNAMIC",
|
||||
}
|
||||
|
||||
local sorts = {
|
||||
@@ -139,6 +146,7 @@ sleep(2000)
|
||||
for n, layout in ipairs(layouts) do
|
||||
dt.gui.libs.lighttable_mode.layout(layout)
|
||||
dt.print(_("set lighttable layout to " .. layout))
|
||||
dt.print_log(_("set lighttable layout to " .. layout))
|
||||
sleep(1500)
|
||||
for i = 1, 10 do
|
||||
dt.gui.libs.lighttable_mode.zoom_level(i)
|
||||
@@ -152,11 +160,17 @@ for n, layout in ipairs(layouts) do
|
||||
end
|
||||
end
|
||||
|
||||
dt.print_log("finished layout and zoom level testing")
|
||||
dt.print_log("starting sort demonstration")
|
||||
-- cycle through sorts
|
||||
|
||||
dt.print(_("lighttable sorting demonstration"))
|
||||
dt.print_log("setting lighttable to filemanager mode")
|
||||
dt.gui.libs.lighttable_mode.layout("DT_LIGHTTABLE_LAYOUT_FILEMANAGER")
|
||||
sleep(500)
|
||||
dt.print_log("setting lighttable to zoom level 5")
|
||||
dt.gui.libs.lighttable_mode.zoom_level(5)
|
||||
dt.print_log("starting sorts")
|
||||
|
||||
for n, sort in ipairs(sorts) do
|
||||
dt.gui.libs.filter.sort(sort)
|
||||
@@ -196,3 +210,11 @@ current_rating = dt.gui.libs.filter.rating(current_rating)
|
||||
current_rating_comparator = dt.gui.libs.filter.rating_comparator(current_rating_comparator)
|
||||
current_sort =dt.gui.libs.filter.sort(current_sort)
|
||||
current_sort_order = dt.gui.libs.filter.sort_order(current_sort_order)
|
||||
|
||||
-- set the destroy routine so that script_manager can call it when
|
||||
-- it's time to destroy the script and then return the data to
|
||||
-- script_manager
|
||||
local script_data = {}
|
||||
script_data.destroy = destroy
|
||||
|
||||
return script_data
|
||||
|
||||
@@ -33,8 +33,16 @@ https://www.darktable.org/lua-api/index.html.php#darktable_new_widget
|
||||
local dt = require "darktable"
|
||||
local du = require "lib/dtutils"
|
||||
|
||||
du.check_min_api_version("3.0.0", "moduleExample")
|
||||
local CURR_API_STRING = dt.configuration.api_version_string
|
||||
du.check_min_api_version("7.0.0", "moduleExample")
|
||||
|
||||
-- return data structure for script_manager
|
||||
|
||||
local script_data = {}
|
||||
|
||||
script_data.destroy = nil -- function to destory the script
|
||||
script_data.destroy_method = nil -- set to hide for libs since we can't destroy them commpletely yet, otherwise leave as nil
|
||||
script_data.restart = nil -- how to restart the (lib) script after it's been hidden - i.e. make it visible again
|
||||
script_data.show = nil -- only required for libs since the destroy_method only hides them
|
||||
|
||||
-- translation
|
||||
|
||||
@@ -86,6 +94,16 @@ local function install_module()
|
||||
end
|
||||
end
|
||||
|
||||
-- script_manager integration to allow a script to be removed
|
||||
-- without restarting darktable
|
||||
local function destroy()
|
||||
dt.gui.libs["exampleModule"].visible = false -- we haven't figured out how to destroy it yet, so we hide it for now
|
||||
end
|
||||
|
||||
local function restart()
|
||||
dt.gui.libs["exampleModule"].visible = true -- the user wants to use it again, so we just make it visible and it shows up in the UI
|
||||
end
|
||||
|
||||
-- https://www.darktable.org/lua-api/types_lua_check_button.html
|
||||
local check_button = dt.new_widget("check_button"){label = _("MyCheck_button"), value = true}
|
||||
|
||||
@@ -148,7 +166,7 @@ else
|
||||
if not mE.event_registered then -- if we are not in lighttable view then register an event to signal when we might be
|
||||
-- https://www.darktable.org/lua-api/index.html#darktable_register_event
|
||||
dt.register_event(
|
||||
"view-changed", -- we want to be informed when the view changes
|
||||
"mdouleExample", "view-changed", -- we want to be informed when the view changes
|
||||
function(event, old_view, new_view)
|
||||
if new_view.name == "lighttable" and old_view.name == "darkroom" then -- if the view changes from darkroom to lighttable
|
||||
install_module() -- register the lib
|
||||
@@ -159,5 +177,14 @@ else
|
||||
end
|
||||
end
|
||||
|
||||
-- set the destroy routine so that script_manager can call it when
|
||||
-- it's time to destroy the script and then return the data to
|
||||
-- script_manager
|
||||
script_data.destroy = destroy
|
||||
script_data.restart = restart -- only required for lib modules until we figure out how to destroy them
|
||||
script_data.destroy_method = "hide" -- tell script_manager that we are hiding the lib so it knows to use the restart function
|
||||
script_data.show = restart -- if the script was "off" when darktable exited, the module is hidden, so force it to show on start
|
||||
|
||||
return script_data
|
||||
-- vim: shiftwidth=2 expandtab tabstop=2 cindent syntax=lua
|
||||
-- kate: hl Lua;
|
||||
|
||||
@@ -52,7 +52,7 @@
|
||||
]]
|
||||
|
||||
local dt = require "darktable"
|
||||
|
||||
|
||||
--[[
|
||||
require "lib/..." provides access to functions that have been pulled from various
|
||||
scripts and consolidated into libraries. Using the libraries eliminates having to
|
||||
@@ -62,7 +62,6 @@ local dt = require "darktable"
|
||||
local du = require "lib/dtutils" -- utilities
|
||||
local df = require "lib/dtutils.file" -- file utilities
|
||||
local dtsys = require "lib/dtutils.system" -- system utilities
|
||||
local CURR_API_STRING = dt.configuration.api_version_string
|
||||
|
||||
--[[
|
||||
darktable is an international program, and it's user interface has been translated into
|
||||
@@ -87,7 +86,7 @@ end
|
||||
screen stating that you couldn't load because the minimum api version wasn't met.
|
||||
]]
|
||||
|
||||
du.check_min_api_version("5.0.0", "multi_os")
|
||||
du.check_min_api_version("7.0.0", "multi_os")
|
||||
|
||||
--[[
|
||||
copy_image_attributes is a local subroutine to copy image attributes in the database from the raw image
|
||||
@@ -197,6 +196,15 @@ local function extract_embedded_jpeg(images)
|
||||
end
|
||||
end
|
||||
|
||||
--[[
|
||||
script_manager integration to allow a script to be removed
|
||||
without restarting darktable
|
||||
]]
|
||||
|
||||
local function destroy()
|
||||
dt.destroy_event("multi_os", "shortcut") -- destroy the event since the callback will no longer be present
|
||||
dt.gui.libs.image.destroy_action("multi_os") -- remove the button from the selected images module
|
||||
end
|
||||
--[[
|
||||
Windows and MacOS don't place executables in the user's path so their location needs to be specified
|
||||
so that the script can find them. An exception to this is packages installed on MacOS with homebrew. Those
|
||||
@@ -231,18 +239,28 @@ end
|
||||
]]
|
||||
|
||||
dt.gui.libs.image.register_action(
|
||||
_("extract embedded jpeg"),
|
||||
"multi_os", _("extract embedded jpeg"),
|
||||
function(event, images) extract_embedded_jpeg(images) end,
|
||||
"extract embedded jpeg"
|
||||
)
|
||||
|
||||
|
||||
--[[
|
||||
Add a shortcut
|
||||
]]
|
||||
|
||||
dt.register_event(
|
||||
"shortcut",
|
||||
"multi_os", "shortcut",
|
||||
function(event, shortcut) extract_embedded_jpeg(dt.gui.action_images) end,
|
||||
"extract embedded jpeg"
|
||||
)
|
||||
|
||||
--[[
|
||||
set the destroy routine so that script_manager can call it when
|
||||
it's time to destroy the script and then return the data to
|
||||
script_manager
|
||||
]]
|
||||
|
||||
local script_data = {}
|
||||
script_data.destroy = destroy
|
||||
|
||||
return script_data
|
||||
|
||||
@@ -41,7 +41,13 @@ local du = require "lib/dtutils"
|
||||
-- V E R S I O N C H E C K
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
||||
du.check_min_api_version("5.0.2", "panels_demo") -- darktable 3.0
|
||||
du.check_min_api_version("7.0.0", "panels_demo")
|
||||
|
||||
-- script_manager integration to allow a script to be removed
|
||||
-- without restarting darktable
|
||||
local function destroy()
|
||||
-- nothing to destroy
|
||||
end
|
||||
|
||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||
-- C O N S T A N T S
|
||||
@@ -134,3 +140,11 @@ for i = 1, #panels do
|
||||
dt.gui.panel_hide(panels[i])
|
||||
end
|
||||
end
|
||||
|
||||
-- set the destroy routine so that script_manager can call it when
|
||||
-- it's time to destroy the script and then return the data to
|
||||
-- script_manager
|
||||
local script_data = {}
|
||||
script_data.destroy = destroy
|
||||
|
||||
return script_data
|
||||
|
||||
@@ -26,6 +26,7 @@ local du = require "lib/dtutils"
|
||||
|
||||
du.check_min_api_version("2.0.1", "preferenceExamples")
|
||||
|
||||
|
||||
dt.preferences.register("preferenceExamples", -- script: 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.
|
||||
"preferenceExamplesString", -- name
|
||||
"string", -- type
|
||||
@@ -34,14 +35,14 @@ dt.preferences.register("preferenceExamples", -- script: This is a string
|
||||
"String") -- default
|
||||
|
||||
dt.preferences.register("preferenceExamples", -- script: 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.
|
||||
"preferenceExamplesString", -- name
|
||||
"preferenceExamplesBool", -- name
|
||||
"bool", -- type
|
||||
"Example Boolean", -- label
|
||||
"Example Boolean Tooltip", -- tooltip
|
||||
true) -- default
|
||||
|
||||
dt.preferences.register("preferenceExamples", -- script: 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.
|
||||
"preferenceExamplesString", -- name
|
||||
"preferenceExamplesInteger", -- name
|
||||
"integer", -- type
|
||||
"Example Integer", -- label
|
||||
"Example Integer Tooltip", -- tooltip
|
||||
@@ -50,7 +51,7 @@ dt.preferences.register("preferenceExamples", -- script: This is a string
|
||||
99) -- max
|
||||
|
||||
dt.preferences.register("preferenceExamples", -- script: 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.
|
||||
"preferenceExamplesString", -- name
|
||||
"preferenceExamplesFloat", -- name
|
||||
"float", -- type
|
||||
"Example Float", -- label
|
||||
"Example Float Tooltip", -- tooltip
|
||||
@@ -60,21 +61,21 @@ dt.preferences.register("preferenceExamples", -- script: This is a string
|
||||
0.5) -- step
|
||||
|
||||
dt.preferences.register("preferenceExamples", -- script: 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.
|
||||
"preferenceExamplesString", -- name
|
||||
"preferenceExamplesFile", -- name
|
||||
"file", -- type
|
||||
"Example File", -- label
|
||||
"Example File Tooltip", -- tooltip
|
||||
"") -- default
|
||||
|
||||
dt.preferences.register("preferenceExamples", -- script: 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.
|
||||
"preferenceExamplesString", -- name
|
||||
"preferenceExamplesDirectory", -- name
|
||||
"directory", -- type
|
||||
"Example Directory", -- label
|
||||
"Example Directory Tooltip", -- tooltip
|
||||
"") -- default
|
||||
|
||||
dt.preferences.register("preferenceExamples", -- script: 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.
|
||||
"preferenceExamplesString", -- name
|
||||
"preferenceExamplesEnum", -- name
|
||||
"enum", -- type
|
||||
"Example Enum", -- label
|
||||
"Example Enum Tooltip", -- tooltip
|
||||
|
||||
@@ -24,6 +24,12 @@ local du = require "lib/dtutils"
|
||||
|
||||
du.check_min_api_version("5.0.0", "printExamples")
|
||||
|
||||
-- script_manager integration to allow a script to be removed
|
||||
-- without restarting darktable
|
||||
local function destroy()
|
||||
-- nothing to destroy
|
||||
end
|
||||
|
||||
-- Will print a string to the darktable control log (the long
|
||||
-- overlayed window that appears over the main panel).
|
||||
dt.print("print")
|
||||
@@ -38,5 +44,12 @@ dt.print_error("print error")
|
||||
-- to enable the Lua logdomain.
|
||||
dt.print_log("print log")
|
||||
|
||||
-- set the destroy routine so that script_manager can call it when
|
||||
-- it's time to destroy the script and then return the data to
|
||||
-- script_manager
|
||||
local script_data = {}
|
||||
script_data.destroy = destroy
|
||||
|
||||
return script_data
|
||||
--
|
||||
-- vim: shiftwidth=2 expandtab tabstop=2 cindent syntax=lua
|
||||
|
||||
@@ -30,7 +30,21 @@ local du = require "lib/dtutils"
|
||||
|
||||
du.check_min_api_version("5.0.0", "running_os")
|
||||
|
||||
-- script_manager integration to allow a script to be removed
|
||||
-- without restarting darktable
|
||||
local function destroy()
|
||||
-- nothing to destroy
|
||||
end
|
||||
|
||||
dt.print("You are running: "..dt.configuration.running_os)
|
||||
|
||||
-- set the destroy routine so that script_manager can call it when
|
||||
-- it's time to destroy the script and then return the data to
|
||||
-- script_manager
|
||||
local script_data = {}
|
||||
script_data.destroy = destroy
|
||||
|
||||
return script_data
|
||||
|
||||
--
|
||||
-- vim: shiftwidth=2 expandtab tabstop=2 cindent syntax=lua
|
||||
|
||||
163
examples/x-touch.lua
Normal file
163
examples/x-touch.lua
Normal file
@@ -0,0 +1,163 @@
|
||||
--[[
|
||||
This file is part of darktable,
|
||||
copyright (c) 2023 Diederik ter Rahe
|
||||
|
||||
darktable 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.
|
||||
|
||||
darktable 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 darktable. If not, see <http://www.gnu.org/licenses/>.
|
||||
]]
|
||||
--[[
|
||||
X-Touch Mini flexible encoder shortcuts
|
||||
|
||||
This script will create virtual sliders that are mapped dynamically to
|
||||
the most relevant sliders for the currently focused processing module.
|
||||
Tailored modules are color zones, tone equalizer, color calibration and
|
||||
mask manager properties. The script can easily be amended for other
|
||||
devices or personal preferences. Virtual "toggle" buttons can be created
|
||||
as well, that dynamically change meaning depending on current status.
|
||||
|
||||
USAGE
|
||||
* require this script from your main lua file
|
||||
* restart darktable
|
||||
* create shortcuts for each of the encoders on the x-touch mini
|
||||
to a virtual slider under lua/x-touch
|
||||
or import the following shortcutsrc file in the shortcuts dialog/preferences tab:
|
||||
|
||||
None;midi:CC1=lua/x-touch/knob 1
|
||||
None;midi:CC2=lua/x-touch/knob 2
|
||||
None;midi:CC3=lua/x-touch/knob 3
|
||||
None;midi:CC4=lua/x-touch/knob 4
|
||||
None;midi:CC5=lua/x-touch/knob 5
|
||||
None;midi:CC6=lua/x-touch/knob 6
|
||||
None;midi:CC7=lua/x-touch/knob 7
|
||||
None;midi:CC8=lua/x-touch/knob 8
|
||||
midi:E0=global/modifiers
|
||||
midi:F0=global/modifiers;ctrl
|
||||
midi:F#0=global/modifiers;alt
|
||||
midi:G#-1=iop/blend/tools/show and edit mask elements
|
||||
midi:A-1=iop/colorzones;focus
|
||||
midi:A#-1=iop/toneequal;focus
|
||||
midi:B-1=iop/colorbalancergb;focus
|
||||
midi:C0=iop/channelmixerrgb;focus
|
||||
]]
|
||||
|
||||
local dt = require "darktable"
|
||||
local du = require "lib/dtutils"
|
||||
|
||||
du.check_min_api_version("9.2.0", "x-touch")
|
||||
|
||||
-- set up 8 mimic sliders with the same function
|
||||
for k = 1,8 do
|
||||
dt.gui.mimic("slider", "knob ".. k,
|
||||
function(action, element, effect, size)
|
||||
-- take the number from the mimic name
|
||||
local k = tonumber(action:sub(-1))
|
||||
|
||||
-- only operate in darkroom; return NAN otherwise
|
||||
if dt.gui.current_view() ~= dt.gui.views.darkroom then
|
||||
return 0/0
|
||||
end
|
||||
|
||||
local maskval = 0/0
|
||||
if k < 8 then
|
||||
-- first try if the mask slider at that position is active
|
||||
local s = { "opacity",
|
||||
"size",
|
||||
"feather",
|
||||
"hardness",
|
||||
"rotation",
|
||||
"curvature",
|
||||
"compression" }
|
||||
maskval = dt.gui.action("lib/masks/properties/" .. s[k],
|
||||
element, effect, size)
|
||||
end
|
||||
-- if a value different from NAN is returned, the slider was active
|
||||
if maskval == maskval then
|
||||
return maskval
|
||||
|
||||
-- try if colorzones module is focused; if so select element of graph
|
||||
elseif dt.gui.action("iop/colorzones", "focus") ~= 0 then
|
||||
which = "iop/colorzones/graph"
|
||||
local e = { "red",
|
||||
"orange",
|
||||
"yellow",
|
||||
"green",
|
||||
"aqua",
|
||||
"blue",
|
||||
"purple",
|
||||
"magenta" }
|
||||
element = e[k]
|
||||
|
||||
|
||||
-- if the sigmoid rgb primaries is focused,
|
||||
-- check sliders
|
||||
elseif dt.gui.action("iop/sigmoid", "focus") ~= 0 and k <8 then
|
||||
local e = { "red attenuation", "red rotation", "green attenuation", "green rotation", "blue attenuation", "blue rotation", "recover purity" }
|
||||
which = "iop/sigmoid/primaries/"..e[k]
|
||||
|
||||
-- if the rgb primaries is focused,
|
||||
-- check sliders
|
||||
elseif dt.gui.action("iop/primaries", "focus") ~= 0 and k >=1 then
|
||||
local e = { "red hue", "red purity", "green hue", "green purity", "blue hue", "blue purity", "tint hue", "tint purity" }
|
||||
which = "iop/primaries/" ..e[k]
|
||||
|
||||
-- if the tone equalizer is focused,
|
||||
-- select one of the sliders in the "simple" tab
|
||||
elseif dt.gui.action("iop/toneequal", "focus") ~= 0 then
|
||||
which ="iop/toneequal/simple/"..(k-9).." EV"
|
||||
|
||||
-- if color calibration is focused,
|
||||
-- the last 4 knobs are sent there
|
||||
elseif dt.gui.action("iop/channelmixerrgb", "focus") ~= 0
|
||||
and k >= 5 then
|
||||
-- knob 5 selects the active tab; pressing it resets to CAT
|
||||
if k == 5 then
|
||||
which = "iop/channelmixerrgb/page"
|
||||
element = "CAT"
|
||||
-- since the tab action is not a slider,
|
||||
-- the effects need to be translated
|
||||
if effect == "up" then effect = "next"
|
||||
elseif effect == "down" then effect = "previous"
|
||||
else effect = "activate"
|
||||
end
|
||||
else
|
||||
-- knobs 6, 7 and 8 are for the three color sliders on each tab
|
||||
which = "iop/focus/sliders"
|
||||
local e = { "1st",
|
||||
"2nd",
|
||||
"3rd" }
|
||||
element = e[k - 5]
|
||||
end
|
||||
|
||||
-- the 4th knob is contrast;
|
||||
-- either colorbalance if it is focused, or filmic
|
||||
elseif dt.gui.action("iop/colorbalancergb", "focus") ~= 0
|
||||
and k == 4 then
|
||||
which = "iop/colorbalancergb/contrast"
|
||||
|
||||
-- in all other cases use a default selection
|
||||
else
|
||||
local s = { "iop/exposure/exposure",
|
||||
"iop/filmicrgb/white relative exposure",
|
||||
"iop/filmicrgb/black relative exposure",
|
||||
"iop/filmicrgb/contrast",
|
||||
"iop/crop/left",
|
||||
"iop/crop/right",
|
||||
"iop/crop/top",
|
||||
"iop/crop/bottom" }
|
||||
which = s[k]
|
||||
end
|
||||
|
||||
-- now pass the element/effect/size to the selected slider
|
||||
return dt.gui.action(which, element, effect, size)
|
||||
end)
|
||||
end
|
||||
@@ -65,10 +65,47 @@ function dtutils.check_min_api_version(min_api, script_name)
|
||||
dt.print_error("This application is written for lua api version " .. min_api .. " or later.")
|
||||
dt.print_error("The current lua api version is " .. current_api)
|
||||
dt.print("ERROR: " .. script_name .. " failed to load. Lua API version " .. min_api .. " or later required.")
|
||||
dt.control.sleep(2000) -- allow time for the error to display before script_manager writes it's error message
|
||||
error("Minimum API " .. min_api .. " not met for " .. script_name .. ".", 0)
|
||||
end
|
||||
end
|
||||
|
||||
dtutils.libdoc.functions["check_max_api_version"] = {
|
||||
Name = [[check_max_api_version]],
|
||||
Synopsis = [[check the maximum required api version against the current api version]],
|
||||
Usage = [[local du = require "lib/dtutils"
|
||||
|
||||
local result = du.check_max_api_version(max_api, script_name)
|
||||
max_api - string - the api version that the application was written for (example: "5.0.0")
|
||||
script_name - string - the name of the script]],
|
||||
Description = [[check_max_api_version compares the maximum api required for the appllication to
|
||||
run against the current api version. This function is used when a part of the Lua API that
|
||||
the script relies on is removed. If the maximum 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.
|
||||
|
||||
Return_Value = [[result - true if the maximum api version is available, false if not.]],
|
||||
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.]],
|
||||
Example = [[check_max_api_version("9.0.0") does nothing if the api is less than or equal to 9.0.0 otherwise an
|
||||
error message is printed and an error is thrown stopping execution of the script.]],
|
||||
See_Also = [[]],
|
||||
Reference = [[]],
|
||||
License = [[]],
|
||||
Copyright = [[]],
|
||||
}
|
||||
|
||||
function dtutils.check_max_api_version(max_api, script_name)
|
||||
local current_api = dt.configuration.api_version_string
|
||||
if current_api > max_api then
|
||||
dt.print_error("This application is written for lua api version " .. max_api .. " or earlier.")
|
||||
dt.print_error("The current lua api version is " .. current_api)
|
||||
dt.print("ERROR: " .. script_name .. " failed to load. Lua API version " .. max_api .. " or earlier required.")
|
||||
dt.control.sleep(2000) -- allow time for the error to display before script_manager writes it's error message
|
||||
error("Maximum API " .. max_api .. " not met for " .. script_name .. ".", 0)
|
||||
end
|
||||
end
|
||||
|
||||
dtutils.libdoc.functions["split"] = {
|
||||
Name = [[split]],
|
||||
Synopsis = [[split a string on a specified separator]],
|
||||
@@ -184,7 +221,8 @@ function dtutils.prequire(req_name)
|
||||
if status then
|
||||
log.msg(log.info, "Loaded " .. req_name)
|
||||
else
|
||||
log.msg(log.info, "Error loading " .. req_name)
|
||||
log.msg(log.error, "Error loading " .. req_name)
|
||||
log.msg(log.error, "Error returned is " .. lib)
|
||||
end
|
||||
return status, lib
|
||||
end
|
||||
@@ -330,4 +368,29 @@ function dtutils.find_image_by_id(imgid)
|
||||
end
|
||||
end
|
||||
|
||||
dtutils.libdoc.functions["deprecated"] = {
|
||||
Name = [[deprecated]],
|
||||
Synopsis = [[print deprecation warning]],
|
||||
Usage = [[local du = require "lib/dtutils"
|
||||
|
||||
du.deprecated(script_name, removal_string)
|
||||
script_name - name of the script being deprecated
|
||||
removal_strubg - a string explaining when the script will be removed]],
|
||||
Description = [[deprecated prints an error message saying the script is deprecated and when it will be removed]],
|
||||
Return_Value = [[]],
|
||||
Limitations = [[]],
|
||||
Example = [[local du = require "lib/dtutils"
|
||||
du.deprecated("contrib/rename-tags.lua", "darktable release 4.0")]],
|
||||
See_Also = [[]],
|
||||
Reference = [[]],
|
||||
License = [[]],
|
||||
Copyright = [[]],
|
||||
}
|
||||
|
||||
function dtutils.deprecated(script_name, removal_string)
|
||||
dt.print_toast("WARNING: " .. script_name .. " is deprecated and will be removed in " .. removal_string)
|
||||
dt.print_error("WARNING: " .. script_name .. " is deprecated and will be removed in " .. removal_string)
|
||||
end
|
||||
|
||||
|
||||
return dtutils
|
||||
|
||||
@@ -191,7 +191,7 @@ end
|
||||
|
||||
local function _search_for_bin_nix(bin)
|
||||
local result = false
|
||||
local p = io.popen("which " .. bin)
|
||||
local p = io.popen("command -v " .. bin)
|
||||
local output = p:read("*a")
|
||||
p:close()
|
||||
if string.len(output) > 0 then
|
||||
@@ -394,125 +394,32 @@ function dtutils_file.check_if_bin_exists(bin)
|
||||
return result
|
||||
end
|
||||
|
||||
dtutils_file.libdoc.functions["split_filepath"] = {
|
||||
Name = [[split_filepath]],
|
||||
Synopsis = [[split a filepath into parts]],
|
||||
Usage = [[local df = require "lib/dtutils.file"
|
||||
-- the following path, filename, etc functions have
|
||||
-- moved to the string library since they are string
|
||||
-- manipulation functions, and to prevent circular
|
||||
-- library inclusiion.
|
||||
|
||||
local result = df.split_filepath(filepath)
|
||||
filepath - string - path and filename]],
|
||||
Description = [[split_filepath splits a filepath into the path, filename, basename and filetype and puts
|
||||
that in a table]],
|
||||
Return_Value = [[result - table - a table containing the path, filename, basename, and filetype]],
|
||||
Limitations = [[]],
|
||||
Example = [[]],
|
||||
See_Also = [[]],
|
||||
Reference = [[]],
|
||||
License = [[]],
|
||||
Copyright = [[]],
|
||||
}
|
||||
-- these functions are left here for compatibility
|
||||
-- with older scripts
|
||||
|
||||
function dtutils_file.split_filepath(str)
|
||||
-- strip out single quotes from quoted pathnames
|
||||
str = string.gsub(str, "'", "")
|
||||
str = string.gsub(str, '"', '')
|
||||
local result = {}
|
||||
-- Thank you Tobias Jakobs for the awesome regular expression, which I tweaked a little
|
||||
result["path"], result["filename"], result["basename"], result["filetype"] = string.match(str, "(.-)(([^\\/]-)%.?([^%.\\/]*))$")
|
||||
if result["basename"] == "" and result["filetype"]:len() > 1 then
|
||||
result["basename"] = result["filetype"]
|
||||
result["filetype"] = ""
|
||||
end
|
||||
return result
|
||||
return ds.split_filepath(str)
|
||||
end
|
||||
|
||||
dtutils_file.libdoc.functions["get_path"] = {
|
||||
Name = [[get_path]],
|
||||
Synopsis = [[get the path from a file path]],
|
||||
Usage = [[local df = require "lib/dtutils.file"
|
||||
|
||||
local result = df.get_path(filepath)
|
||||
filepath - string - path and filename]],
|
||||
Description = [[get_path strips the filename and filetype from a path and returns the path]],
|
||||
Return_Value = [[result - string - the path]],
|
||||
Limitations = [[]],
|
||||
Example = [[]],
|
||||
See_Also = [[]],
|
||||
Reference = [[]],
|
||||
License = [[]],
|
||||
Copyright = [[]],
|
||||
}
|
||||
|
||||
function dtutils_file.get_path(str)
|
||||
local parts = dtutils_file.split_filepath(str)
|
||||
return parts["path"]
|
||||
return ds.get_path(str)
|
||||
end
|
||||
|
||||
dtutils_file.libdoc.functions["get_filename"] = {
|
||||
Name = [[get_filename]],
|
||||
Synopsis = [[get the filename and extension from a file path]],
|
||||
Usage = [[local df = require "lib/dtutils.file"
|
||||
|
||||
local result = df.get_filename(filepath)
|
||||
filepath - string - path and filename]],
|
||||
Description = [[get_filename strips the path from a filepath and returns the filename]],
|
||||
Return_Value = [[result - string - the file name and type]],
|
||||
Limitations = [[]],
|
||||
Example = [[]],
|
||||
See_Also = [[]],
|
||||
Reference = [[]],
|
||||
License = [[]],
|
||||
Copyright = [[]],
|
||||
}
|
||||
|
||||
function dtutils_file.get_filename(str)
|
||||
local parts = dtutils_file.split_filepath(str)
|
||||
return parts["filename"]
|
||||
return ds.get_filename(str)
|
||||
end
|
||||
|
||||
dtutils_file.libdoc.functions["get_basename"] = {
|
||||
Name = [[get_basename]],
|
||||
Synopsis = [[get the filename without the path or extension]],
|
||||
Usage = [[local df = require "lib/dtutils.file"
|
||||
|
||||
local result = df.get_basename(filepath)
|
||||
filepath - string - path and filename]],
|
||||
Description = [[get_basename returns the name of the file without the path or filetype
|
||||
]],
|
||||
Return_Value = [[result - string - the basename of the file]],
|
||||
Limitations = [[]],
|
||||
Example = [[]],
|
||||
See_Also = [[]],
|
||||
Reference = [[]],
|
||||
License = [[]],
|
||||
Copyright = [[]],
|
||||
}
|
||||
|
||||
function dtutils_file.get_basename(str)
|
||||
local parts = dtutils_file.split_filepath(str)
|
||||
return parts["basename"]
|
||||
return ds.get_basename(str)
|
||||
end
|
||||
|
||||
dtutils_file.libdoc.functions["get_filetype"] = {
|
||||
Name = [[get_filetype]],
|
||||
Synopsis = [[get the filetype from a filename]],
|
||||
Usage = [[local df = require "lib/dtutils.file"
|
||||
|
||||
local result = df.get_filetype(filepath)
|
||||
filepath - string - path and filename]],
|
||||
Description = [[get_filetype returns the filetype from the supplied filepath]],
|
||||
Return_Value = [[result - string - the filetype]],
|
||||
Limitations = [[]],
|
||||
Example = [[]],
|
||||
See_Also = [[]],
|
||||
Reference = [[]],
|
||||
License = [[]],
|
||||
Copyright = [[]],
|
||||
}
|
||||
|
||||
function dtutils_file.get_filetype(str)
|
||||
local parts = dtutils_file.split_filepath(str)
|
||||
return parts["filetype"]
|
||||
return ds.get_filetype(str)
|
||||
end
|
||||
|
||||
|
||||
|
||||
@@ -17,11 +17,11 @@ dtutils_log.libdoc = {
|
||||
|
||||
print out warning, error and success messages as code is running
|
||||
|
||||
log.log_level(debug)
|
||||
log.log_level(log.debug)
|
||||
|
||||
print out debugging messages too because this isnt working
|
||||
|
||||
log.log_level(info)
|
||||
log.log_level(log.info)
|
||||
|
||||
I want to make sure this is working ok
|
||||
|
||||
|
||||
@@ -294,6 +294,127 @@ function dtutils_string.sanitize_lua(str)
|
||||
return str
|
||||
end
|
||||
|
||||
dtutils_string.libdoc.functions["split_filepath"] = {
|
||||
Name = [[split_filepath]],
|
||||
Synopsis = [[split a filepath into parts]],
|
||||
Usage = [[local ds = require "lib/dtutils.string"
|
||||
|
||||
local result = ds.split_filepath(filepath)
|
||||
filepath - string - path and filename]],
|
||||
Description = [[split_filepath splits a filepath into the path, filename, basename and filetype and puts
|
||||
that in a table]],
|
||||
Return_Value = [[result - table - a table containing the path, filename, basename, and filetype]],
|
||||
Limitations = [[]],
|
||||
Example = [[]],
|
||||
See_Also = [[]],
|
||||
Reference = [[]],
|
||||
License = [[]],
|
||||
Copyright = [[]],
|
||||
}
|
||||
|
||||
function dtutils_string.split_filepath(str)
|
||||
-- strip out single quotes from quoted pathnames
|
||||
str = string.gsub(str, "'", "")
|
||||
str = string.gsub(str, '"', '')
|
||||
local result = {}
|
||||
-- Thank you Tobias Jakobs for the awesome regular expression, which I tweaked a little
|
||||
result["path"], result["filename"], result["basename"], result["filetype"] = string.match(str, "(.-)(([^\\/]-)%.?([^%.\\/]*))$")
|
||||
if result["basename"] == "" and result["filetype"]:len() > 1 then
|
||||
result["basename"] = result["filetype"]
|
||||
result["filetype"] = ""
|
||||
end
|
||||
return result
|
||||
end
|
||||
|
||||
dtutils_string.libdoc.functions["get_path"] = {
|
||||
Name = [[get_path]],
|
||||
Synopsis = [[get the path from a file path]],
|
||||
Usage = [[local ds = require "lib/dtutils.string"
|
||||
|
||||
local result = ds.get_path(filepath)
|
||||
filepath - string - path and filename]],
|
||||
Description = [[get_path strips the filename and filetype from a path and returns the path]],
|
||||
Return_Value = [[result - string - the path]],
|
||||
Limitations = [[]],
|
||||
Example = [[]],
|
||||
See_Also = [[]],
|
||||
Reference = [[]],
|
||||
License = [[]],
|
||||
Copyright = [[]],
|
||||
}
|
||||
|
||||
function dtutils_string.get_path(str)
|
||||
local parts = dtutils_string.split_filepath(str)
|
||||
return parts["path"]
|
||||
end
|
||||
|
||||
dtutils_string.libdoc.functions["get_filename"] = {
|
||||
Name = [[get_filename]],
|
||||
Synopsis = [[get the filename and extension from a file path]],
|
||||
Usage = [[local ds = require "lib/dtutils.string"
|
||||
|
||||
local result = ds.get_filename(filepath)
|
||||
filepath - string - path and filename]],
|
||||
Description = [[get_filename strips the path from a filepath and returns the filename]],
|
||||
Return_Value = [[result - string - the file name and type]],
|
||||
Limitations = [[]],
|
||||
Example = [[]],
|
||||
See_Also = [[]],
|
||||
Reference = [[]],
|
||||
License = [[]],
|
||||
Copyright = [[]],
|
||||
}
|
||||
|
||||
function dtutils_string.get_filename(str)
|
||||
local parts = dtutils_string.split_filepath(str)
|
||||
return parts["filename"]
|
||||
end
|
||||
|
||||
dtutils_string.libdoc.functions["get_basename"] = {
|
||||
Name = [[get_basename]],
|
||||
Synopsis = [[get the filename without the path or extension]],
|
||||
Usage = [[local ds = require "lib/dtutils.string"
|
||||
|
||||
local result = ds.get_basename(filepath)
|
||||
filepath - string - path and filename]],
|
||||
Description = [[get_basename returns the name of the file without the path or filetype
|
||||
]],
|
||||
Return_Value = [[result - string - the basename of the file]],
|
||||
Limitations = [[]],
|
||||
Example = [[]],
|
||||
See_Also = [[]],
|
||||
Reference = [[]],
|
||||
License = [[]],
|
||||
Copyright = [[]],
|
||||
}
|
||||
|
||||
function dtutils_string.get_basename(str)
|
||||
local parts = dtutils_string.split_filepath(str)
|
||||
return parts["basename"]
|
||||
end
|
||||
|
||||
dtutils_string.libdoc.functions["get_filetype"] = {
|
||||
Name = [[get_filetype]],
|
||||
Synopsis = [[get the filetype from a filename]],
|
||||
Usage = [[local ds = require "lib/dtutils.string"
|
||||
|
||||
local result = ds.get_filetype(filepath)
|
||||
filepath - string - path and filename]],
|
||||
Description = [[get_filetype returns the filetype from the supplied filepath]],
|
||||
Return_Value = [[result - string - the filetype]],
|
||||
Limitations = [[]],
|
||||
Example = [[]],
|
||||
See_Also = [[]],
|
||||
Reference = [[]],
|
||||
License = [[]],
|
||||
Copyright = [[]],
|
||||
}
|
||||
|
||||
function dtutils_string.get_filetype(str)
|
||||
local parts = dtutils_string.split_filepath(str)
|
||||
return parts["filetype"]
|
||||
end
|
||||
|
||||
|
||||
|
||||
return dtutils_string
|
||||
|
||||
12
locale/de_DE/LC_MESSAGES/select_non_existing.po
Normal file
12
locale/de_DE/LC_MESSAGES/select_non_existing.po
Normal file
@@ -0,0 +1,12 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
|
||||
msgid "select non existing images"
|
||||
msgstr "nicht vorhandene Bilder auswählen"
|
||||
|
||||
msgid "select non existing"
|
||||
msgstr "nicht vorhandene auswählen"
|
||||
|
||||
msgid "select all non-existing images in the current images"
|
||||
msgstr "alle nicht vorhandenen Bilder in den aktuellen Bildern auswählen"
|
||||
85
locale/fr_FR/LC_MESSAGES/OpenInExplorer.po
Normal file
85
locale/fr_FR/LC_MESSAGES/OpenInExplorer.po
Normal file
@@ -0,0 +1,85 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"POT-Creation-Date: 2022-06-27 17:22+0200\n"
|
||||
"PO-Revision-Date: 2022-06-27 17:36+0200\n"
|
||||
"Last-Translator: Manuel PINTOR <manu@lepassepartout.fr>\n"
|
||||
"Language-Team: \n"
|
||||
"Language: fr_FR\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.3\n"
|
||||
"X-Poedit-Basepath: ../../../contrib\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||
"X-Poedit-SearchPath-0: OpenInExplorer.lua\n"
|
||||
|
||||
#: OpenInExplorer.lua:79
|
||||
msgid ""
|
||||
"OpenInExplorer plug-in only supports Linux, macOS, and Windows at this time"
|
||||
msgstr ""
|
||||
"Le script OpenInExplorer ne fonctionne que sur Linux, macOS et Windows pour "
|
||||
"le moment"
|
||||
|
||||
#: OpenInExplorer.lua:95
|
||||
msgid ""
|
||||
"No links directory selected.\n"
|
||||
"Please check the dt preferences (lua options)"
|
||||
msgstr ""
|
||||
"Aucun répertoire de liens sélectionné.\n"
|
||||
"Voir dans les préférences dt > options lua"
|
||||
|
||||
#: OpenInExplorer.lua:99
|
||||
#, lua-format
|
||||
msgid ""
|
||||
"Links directory '%s' not found.\n"
|
||||
"Please check the dt preferences (lua options)"
|
||||
msgstr ""
|
||||
"Répertoire de liens '%s' inexistant.\n"
|
||||
"Voir dans les préférences dt > options lua"
|
||||
|
||||
#: OpenInExplorer.lua:156
|
||||
msgid "Failed to create links. Missing rights?"
|
||||
msgstr "Erreur de création de liens. Droits insuffisants ?"
|
||||
|
||||
#: OpenInExplorer.lua:172
|
||||
msgid "Please select an image"
|
||||
msgstr "Sélectionner une image SVP"
|
||||
|
||||
#: OpenInExplorer.lua:178
|
||||
msgid "Please select fewer images (max. 15)"
|
||||
msgstr "Sélectionner moins d'images SVP (max. 15)"
|
||||
|
||||
#: OpenInExplorer.lua:203
|
||||
msgid "show in file explorer"
|
||||
msgstr "afficher dans le gestionnaire de fichiers"
|
||||
|
||||
#: OpenInExplorer.lua:205
|
||||
msgid "Open the file manager at the selected image's location"
|
||||
msgstr "Ouvre le gestionnaire de fichiers à l'endroit de l'image sélectionnée"
|
||||
|
||||
#: OpenInExplorer.lua:212
|
||||
msgid "OpenInExplorer: linked files directory"
|
||||
msgstr "OpenInExplorer : répertoire des fichiers liés"
|
||||
|
||||
#: OpenInExplorer.lua:213
|
||||
msgid ""
|
||||
"Directory to store the links to the file names. Requires restart to take "
|
||||
"effect"
|
||||
msgstr ""
|
||||
"Répertoire dans lequel enregistrer les liens sur les fichiers. Nécessite un "
|
||||
"redémarrage de dt"
|
||||
|
||||
#: OpenInExplorer.lua:216
|
||||
msgid "Select directory"
|
||||
msgstr "Sélectionner un répertoire"
|
||||
|
||||
#: OpenInExplorer.lua:222
|
||||
msgid "OpenInExplorer: use links"
|
||||
msgstr "OpenInExplorer : utiliser des liens"
|
||||
|
||||
#: OpenInExplorer.lua:223
|
||||
msgid "Use links instead of multiple windows. Requires restart to take effect"
|
||||
msgstr ""
|
||||
"Utiliser des liens plutôt que de multiples fenêtres. Nécessite un "
|
||||
"redémarrage de dt"
|
||||
117
locale/fr_FR/LC_MESSAGES/photils.po
Normal file
117
locale/fr_FR/LC_MESSAGES/photils.po
Normal file
@@ -0,0 +1,117 @@
|
||||
# French messages for photils.lua
|
||||
# Christophe Agathon <christophe.agathon@gmail.com>, 2021
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"POT-Creation-Date: 2021-08-13 09:04+0200\n"
|
||||
"PO-Revision-Date: 2021-08-13 09:49+0200\n"
|
||||
"Last-Translator: Christophe Agathon <christophe.agathon@gmail.com>\n"
|
||||
"Language-Team: \n"
|
||||
"Language: fr_FR\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.4.1\n"
|
||||
"X-Poedit-Basepath: ../../../contrib\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||
"X-Poedit-SearchPath-0: photils.lua\n"
|
||||
|
||||
#: photils.lua:117
|
||||
msgid "get tags"
|
||||
msgstr "trouver des mots-clés"
|
||||
|
||||
#: photils.lua:148
|
||||
msgid "requires a restart to be applied"
|
||||
msgstr "nécessite un redémarrage pour être pris en compte"
|
||||
|
||||
#: photils.lua:163
|
||||
msgid "min confidence value"
|
||||
msgstr "niveau de confiance minimum"
|
||||
|
||||
#: photils.lua:180
|
||||
msgid ""
|
||||
"The suggested tags were not generated\n"
|
||||
" for the currently selected image!"
|
||||
msgstr ""
|
||||
"La proposition de mots-clés n'a pas été générée\n"
|
||||
" pour l'image sélectionnée actuellement !"
|
||||
|
||||
#: photils.lua:186
|
||||
#, lua-format
|
||||
msgid " page %s of %s "
|
||||
msgstr " page %s de %s "
|
||||
|
||||
#: photils.lua:237
|
||||
msgid "Apply tag to image"
|
||||
msgstr "Appliquer les mots-clés à l'image"
|
||||
|
||||
#: photils.lua:249
|
||||
msgid "Tags successfully attached to image"
|
||||
msgstr "Les mots-clés ont bien été ajoutés à l'image"
|
||||
|
||||
#: photils.lua:299
|
||||
#, lua-format
|
||||
msgid "%s found %d tags for your image"
|
||||
msgstr "%s a trouvé %d mots-clés pour votre image"
|
||||
|
||||
#: photils.lua:315
|
||||
msgid "No image selected."
|
||||
msgstr "Pas d'image sélectionnée."
|
||||
|
||||
#: photils.lua:319
|
||||
msgid "This plugin can only handle a single image."
|
||||
msgstr "Ce plugin ne peut gérer qu'une seule image."
|
||||
|
||||
#: photils.lua:326
|
||||
#, lua-format
|
||||
msgid "%s failed, see terminal output for details"
|
||||
msgstr ""
|
||||
"%s a échoué, consultez les messages sur le terminal pour plus de détails"
|
||||
|
||||
#: photils.lua:334
|
||||
#, lua-format
|
||||
msgid "no tags where found"
|
||||
msgstr "aucun mot-clé n'a été trouvé"
|
||||
|
||||
#: photils.lua:365
|
||||
#, lua-format
|
||||
msgid "attach %d tags"
|
||||
msgstr "ajouter %d mots-clés"
|
||||
|
||||
#: photils.lua:429 photils.lua:430
|
||||
msgid "photils-cli not found"
|
||||
msgstr "photils-cli non trouvé"
|
||||
|
||||
#: photils.lua:432
|
||||
msgid ""
|
||||
"Select an image, click \"get tags\" and get \n"
|
||||
"suggestions for tags."
|
||||
msgstr ""
|
||||
"Sélectionnez une image, cliquez sur « trouver des mots-clés » \n"
|
||||
"pour obtenir une proposition de mots-clés."
|
||||
|
||||
#: photils.lua:467
|
||||
msgid "photils: show confidence value"
|
||||
msgstr "photils: afficher le niveau de confiance"
|
||||
|
||||
# Original message should begin with capital I
|
||||
#: photils.lua:468
|
||||
msgid "if enabled, the confidence value for each tag is displayed"
|
||||
msgstr "Si activé, le niveau de confiance de chaque mot-clé est affiché"
|
||||
|
||||
#: photils.lua:474
|
||||
msgid "photils: use exported image for tag request"
|
||||
msgstr "photils: utiliser l'image exportée pour la recherche de mots-clés"
|
||||
|
||||
#: photils.lua:475
|
||||
msgid ""
|
||||
"If enabled, the image passed to photils for tag suggestion is based on the "
|
||||
"exported, already edited image. Otherwise, the embedded thumbnail of the RAW "
|
||||
"file will be used for tag suggestion.The embedded thumbnail could speedup "
|
||||
"the tag suggestion but can fail if the RAW file is not supported."
|
||||
msgstr ""
|
||||
"Si activé, l'image passée à photils pour la proposition de mots-clés est "
|
||||
"basée sur l'export de l'image déjà éditée. Sinon, c'est la vignette "
|
||||
"encapsulée dans le fichier RAW qui sera utilisée. La vignette encapsulée "
|
||||
"pourra accélérer la proposition des mots-clés mais la recherche échouera si "
|
||||
"le fichier RAW n'est pas supporté."
|
||||
62
locale/it_IT/LC_MESSAGES/executable_manager.po
Normal file
62
locale/it_IT/LC_MESSAGES/executable_manager.po
Normal file
@@ -0,0 +1,62 @@
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
#
|
||||
# Maurizio Paglia <mpaglia0@gmail.com>, 2022.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2022-07-11 22:19+0200\n"
|
||||
"PO-Revision-Date: 2022-07-11 22:21+0200\n"
|
||||
"Last-Translator: Maurizio Paglia <mpaglia0@gmail.com>\n"
|
||||
"Language-Team: Italian <>\n"
|
||||
"Language: it\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Generator: Lokalize 21.12.3\n"
|
||||
|
||||
#: executable_manager.lua:144
|
||||
msgid "No executable paths found, exiting..."
|
||||
msgstr "Nessun percorso con eseguibili, esco..."
|
||||
|
||||
#: executable_manager.lua:160
|
||||
msgid "select an executable"
|
||||
msgstr "seleziona un eseguibile"
|
||||
|
||||
#: executable_manager.lua:160
|
||||
msgid "search path for executable"
|
||||
msgstr "cerca il percorso dell'eseguibile"
|
||||
|
||||
#: executable_manager.lua:169
|
||||
msgid "select "
|
||||
msgstr "seleziona"
|
||||
|
||||
#: executable_manager.lua:169
|
||||
msgid " executable"
|
||||
msgstr " eseguibile"
|
||||
|
||||
#: executable_manager.lua:190
|
||||
msgid "select executable to modify"
|
||||
msgstr "Seleziona l'eseguibile da modificare"
|
||||
|
||||
#: executable_manager.lua:205
|
||||
msgid "current"
|
||||
msgstr "Attuale"
|
||||
|
||||
#: executable_manager.lua:207
|
||||
msgid "select"
|
||||
msgstr "Seleziona"
|
||||
|
||||
#: executable_manager.lua:209
|
||||
msgid "reset"
|
||||
msgstr "Cancella"
|
||||
|
||||
#: executable_manager.lua:212
|
||||
msgid "Clear path for "
|
||||
msgstr "Cancella il percorso di "
|
||||
|
||||
#: executable_manager.lua:211
|
||||
msgid "clear"
|
||||
msgstr "Pulisci"
|
||||
190
locale/it_IT/LC_MESSAGES/script_manager.po
Normal file
190
locale/it_IT/LC_MESSAGES/script_manager.po
Normal file
@@ -0,0 +1,190 @@
|
||||
# French messages for script_manager.lua
|
||||
# Christophe Agathon <christophe.agathon@gmail.com>, 2020.
|
||||
# Maurizio Paglia <mpaglia0@gmail.com>, 2021, 2022.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"POT-Creation-Date: 2020-12-28 10:22+0100\n"
|
||||
"PO-Revision-Date: 2022-07-11 22:03+0200\n"
|
||||
"Last-Translator: Maurizio Paglia <mpaglia0@gmail.com>\n"
|
||||
"Language-Team: Italian <>\n"
|
||||
"Language: fr_FR\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Lokalize 21.12.3\n"
|
||||
"X-Poedit-Basepath: ../../../tools\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||
"X-Poedit-KeywordsList: _\n"
|
||||
"X-Poedit-SearchPath-0: script_manager.lua\n"
|
||||
|
||||
#: script_manager.lua:190
|
||||
msgid "Cant read from "
|
||||
msgstr "Non posso leggere da "
|
||||
|
||||
#: script_manager.lua:204
|
||||
msgid "Loaded "
|
||||
msgstr "Script caricato "
|
||||
|
||||
#: script_manager.lua:207
|
||||
msgid " failed to load"
|
||||
msgstr "Non riesco a caricare lo script"
|
||||
|
||||
#: script_manager.lua:223
|
||||
msgid " will not start when darktable is restarted"
|
||||
msgstr " non verrà avviato al riavvio di darktable"
|
||||
|
||||
#: script_manager.lua:281 script_manager.lua:345
|
||||
msgid "find command is "
|
||||
msgstr "Il comando find è "
|
||||
|
||||
#: script_manager.lua:321
|
||||
msgid "lua scripts successfully updated"
|
||||
msgstr "Gli script lua sono stati correttamente aggiornati"
|
||||
|
||||
#: script_manager.lua:381
|
||||
msgid "category "
|
||||
msgstr "Categoria"
|
||||
|
||||
#: script_manager.lua:381
|
||||
msgid " is already in use. Please specify a different category name."
|
||||
msgstr " è già utilizzato. Prego specificare un nome differente."
|
||||
|
||||
#: script_manager.lua:410
|
||||
msgid "scripts successfully installed into category "
|
||||
msgstr "Gli script sono stati installati correttamente nella categoria "
|
||||
|
||||
#: script_manager.lua:426
|
||||
msgid "No scripts found to install"
|
||||
msgstr "Non trovo script da installare"
|
||||
|
||||
#: script_manager.lua:430
|
||||
msgid "failed to download scripts"
|
||||
msgstr "Non riesco a scaricare gli script"
|
||||
|
||||
# Peut-être que « activé » serait mieux, mais ce n'est pas la traduction de « started »
|
||||
#: script_manager.lua:458
|
||||
msgid " started"
|
||||
msgstr " avviato"
|
||||
|
||||
# Peut-être que « désactivé » serait mieux, mais ce n'est pas la traduction de « stopped »
|
||||
#: script_manager.lua:460
|
||||
msgid " stopped"
|
||||
msgstr " bloccato"
|
||||
|
||||
#: script_manager.lua:545
|
||||
msgid "Page "
|
||||
msgstr "Pag."
|
||||
|
||||
#: script_manager.lua:545
|
||||
msgid " of "
|
||||
msgstr " di "
|
||||
|
||||
#: script_manager.lua:674
|
||||
msgid "scripts to update"
|
||||
msgstr "Script da aggiornare"
|
||||
|
||||
#: script_manager.lua:675
|
||||
msgid "select the scripts installation to update"
|
||||
msgstr "Selezionare l'installazione di script da aggiornare"
|
||||
|
||||
#: script_manager.lua:684 script_manager.lua:742
|
||||
msgid "update scripts"
|
||||
msgstr "Aggiornare gli script"
|
||||
|
||||
#: script_manager.lua:685
|
||||
msgid "update the lua scripts from the repository"
|
||||
msgstr "Aggiornare gli script lua del repo"
|
||||
|
||||
#: script_manager.lua:696
|
||||
msgid ""
|
||||
"enter the URL of the git repository containing the scripts you wish to add"
|
||||
msgstr "Immettere l'URL del repo git che contiene gli script da aggiungere"
|
||||
|
||||
#: script_manager.lua:701
|
||||
msgid "name of new category"
|
||||
msgstr "Nome della nuova categoria"
|
||||
|
||||
#: script_manager.lua:702
|
||||
msgid "enter a category name for the additional scripts"
|
||||
msgstr "Immettere il nome della categoria per altri script"
|
||||
|
||||
#: script_manager.lua:707
|
||||
msgid "URL to download additional scripts from"
|
||||
msgstr "URL dal quale scaricare ulteriori script"
|
||||
|
||||
#: script_manager.lua:709
|
||||
msgid "new category to place scripts in"
|
||||
msgstr "Nuova categoria che dovrà contenere gli script"
|
||||
|
||||
#: script_manager.lua:712
|
||||
msgid "install additional scripts"
|
||||
msgstr "Installare gli script aggiuntivi"
|
||||
|
||||
#: script_manager.lua:720
|
||||
msgid "Enable \"Disable Scripts\" button"
|
||||
msgstr "Abilita il pulsante \"Disabilita Script\""
|
||||
|
||||
#: script_manager.lua:730
|
||||
msgid "Disable Scripts"
|
||||
msgstr "Disabilita Script"
|
||||
|
||||
#: script_manager.lua:736
|
||||
msgid "lua scripts will not run the next time darktable is started"
|
||||
msgstr "Gli script lua non verranno avviati al prossimo riavvio di darktable"
|
||||
|
||||
#: script_manager.lua:745
|
||||
msgid "add more scripts"
|
||||
msgstr "Aggiungi altri script"
|
||||
|
||||
#: script_manager.lua:747
|
||||
msgid "disable scripts"
|
||||
msgstr "Disabilita script"
|
||||
|
||||
#: script_manager.lua:755
|
||||
msgid "category"
|
||||
msgstr "categoria"
|
||||
|
||||
#: script_manager.lua:756
|
||||
msgid "select the script category"
|
||||
msgstr "Seleziona la categoria"
|
||||
|
||||
#: script_manager.lua:780
|
||||
msgid "Page:"
|
||||
msgstr "Pag.:"
|
||||
|
||||
#: script_manager.lua:808
|
||||
msgid "Scripts"
|
||||
msgstr "Scripts"
|
||||
|
||||
#: script_manager.lua:817
|
||||
msgid "scripts per page"
|
||||
msgstr "Script per pagina"
|
||||
|
||||
#: script_manager.lua:818
|
||||
msgid "select number of start/stop buttons to display"
|
||||
msgstr "Selezionare il numero di pulsanti da visualizzare"
|
||||
|
||||
#: script_manager.lua:829
|
||||
msgid "change number of buttons"
|
||||
msgstr "Modifica la quantità di pulsanti"
|
||||
|
||||
#: script_manager.lua:837
|
||||
msgid "Configuration"
|
||||
msgstr "Configurazione"
|
||||
|
||||
#: script_manager.lua:858
|
||||
msgid "action"
|
||||
msgstr "Azione"
|
||||
|
||||
#: script_manager.lua:864
|
||||
msgid "install/update scripts"
|
||||
msgstr "Installa/aggiorna script"
|
||||
|
||||
#: script_manager.lua:864
|
||||
msgid "configure"
|
||||
msgstr "Configura"
|
||||
|
||||
#: script_manager.lua:864
|
||||
msgid "start/stop scripts"
|
||||
msgstr "Avvia/blocca script"
|
||||
46
locale/pt_BR/LC_MESSAGES/AutoGrouper.po
Normal file
46
locale/pt_BR/LC_MESSAGES/AutoGrouper.po
Normal file
@@ -0,0 +1,46 @@
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
#
|
||||
# Marcus Gama <marcus.gama@gmail.com>, 2021.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-09-28 19:37-0300\n"
|
||||
"PO-Revision-Date: 2021-09-28 19:54-0300\n"
|
||||
"Last-Translator: Marcus Gama <marcus.gama@gmail.com>\n"
|
||||
"Language-Team: Portuguese <darktable-dev@lists.darktable.org>\n"
|
||||
"Language: pt_BR\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||
"X-Generator: Lokalize 21.08.1\n"
|
||||
|
||||
#: ../contrib/AutoGrouper.lua:144
|
||||
msgid "auto group"
|
||||
msgstr "grupo automático"
|
||||
|
||||
#: ../contrib/AutoGrouper.lua:173
|
||||
msgid "group gap [sec.]"
|
||||
msgstr "intervalo de agrupamento [seg]"
|
||||
|
||||
#: ../contrib/AutoGrouper.lua:174
|
||||
msgid "minimum gap, in seconds, between groups"
|
||||
msgstr "intervalo mínimo, em segundos, entre os grupos"
|
||||
|
||||
#: ../contrib/AutoGrouper.lua:187
|
||||
msgid "auto group: selected"
|
||||
msgstr "grupo automático: selecionado"
|
||||
|
||||
#: ../contrib/AutoGrouper.lua:188
|
||||
msgid "auto group selected images"
|
||||
msgstr "agrupa automaticamente as imagens selecionadas"
|
||||
|
||||
#: ../contrib/AutoGrouper.lua:192
|
||||
msgid "auto group: collection"
|
||||
msgstr "grupo automático: coleção"
|
||||
|
||||
#: ../contrib/AutoGrouper.lua:193
|
||||
msgid "auto group the entire collection"
|
||||
msgstr "agrupa automaticamente toda a coleção"
|
||||
97
locale/pt_BR/LC_MESSAGES/CollectHelper.po
Normal file
97
locale/pt_BR/LC_MESSAGES/CollectHelper.po
Normal file
@@ -0,0 +1,97 @@
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
#
|
||||
# Marcus Gama <marcus.gama@gmail.com>, 2021.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-09-28 19:37-0300\n"
|
||||
"PO-Revision-Date: 2021-09-28 20:02-0300\n"
|
||||
"Last-Translator: Marcus Gama <marcus.gama@gmail.com>\n"
|
||||
"Language-Team: Portuguese <darktable-dev@lists.darktable.org>\n"
|
||||
"Language: pt_BR\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||
"X-Generator: Lokalize 21.08.1\n"
|
||||
|
||||
#: ../contrib/CollectHelper.lua:74
|
||||
msgid "Please select a single image"
|
||||
msgstr "Por favor, selecione uma única imagem"
|
||||
|
||||
#: ../contrib/CollectHelper.lua:124
|
||||
msgid "select an image with an active color label"
|
||||
msgstr "selecione uma imagem com uma etiqueta de cor ativa"
|
||||
|
||||
#: ../contrib/CollectHelper.lua:205
|
||||
msgid "collect: previous"
|
||||
msgstr "colecionar: anterior"
|
||||
|
||||
#: ../contrib/CollectHelper.lua:207
|
||||
msgid "Sets the Collect parameters to be the previously active parameters"
|
||||
msgstr "Define os parâmetros da coleção para os ativos anteriormente"
|
||||
|
||||
#: ../contrib/CollectHelper.lua:211
|
||||
msgid "collect: folder"
|
||||
msgstr "colecionar: pasta"
|
||||
|
||||
#: ../contrib/CollectHelper.lua:213
|
||||
msgid "Sets the Collect parameters to be the selected images's folder"
|
||||
msgstr "Define os parâmetros da coleção para a pasta de imagens selecionada"
|
||||
|
||||
#: ../contrib/CollectHelper.lua:218
|
||||
msgid "collect: color label(s)"
|
||||
msgstr "colecionar: etiqueta(s) de cor"
|
||||
|
||||
#: ../contrib/CollectHelper.lua:220
|
||||
msgid "Sets the Collect parameters to be the selected images's color label(s)"
|
||||
msgstr ""
|
||||
"Define os parâmetros da coleção para a(s) etiqueta(s) de cor das imagens"
|
||||
" selecionadas"
|
||||
|
||||
#: ../contrib/CollectHelper.lua:225
|
||||
msgid "collect: all (AND)"
|
||||
msgstr "colecionar: tudo (E)"
|
||||
|
||||
#: ../contrib/CollectHelper.lua:227
|
||||
msgid ""
|
||||
"Sets the Collect parameters based on all activated CollectHelper options"
|
||||
msgstr "Define os parâmetros da coleção baseado em todas as opções do script"
|
||||
|
||||
#: ../contrib/CollectHelper.lua:234
|
||||
msgid "CollectHelper: All"
|
||||
msgstr "CollectHelper: Tudo"
|
||||
|
||||
#: ../contrib/CollectHelper.lua:235
|
||||
msgid ""
|
||||
"Will create a collect parameter set that utilizes all enabled CollectHelper "
|
||||
"types (AND)"
|
||||
msgstr ""
|
||||
"Criará um conjunto de parâmetros de coleção que utilizará todos os tipos "
|
||||
"habilitados do CollectHelper (E)"
|
||||
|
||||
#: ../contrib/CollectHelper.lua:240
|
||||
msgid "CollectHelper: Color Label(s)"
|
||||
msgstr "CollectHelper: Etiqueta(s) de Cor"
|
||||
|
||||
#: ../contrib/CollectHelper.lua:241
|
||||
msgid ""
|
||||
"Enable the button that allows you to swap to a collection based on selected "
|
||||
"image's COLOR LABEL(S)"
|
||||
msgstr ""
|
||||
"Habilita o botão que permite que você alterna para uma coleção baseada na "
|
||||
"ETIQUETA(S) DE COR da imagem selecionada"
|
||||
|
||||
#: ../contrib/CollectHelper.lua:246
|
||||
msgid "CollectHelper: Folder"
|
||||
msgstr "CollectHelper: Pasta"
|
||||
|
||||
#: ../contrib/CollectHelper.lua:247
|
||||
msgid ""
|
||||
"Enable the button that allows you to swap to a collection based on selected "
|
||||
"image's FOLDER location"
|
||||
msgstr ""
|
||||
"Habilita o botão que permite que você alterne para uma coleção baseada na "
|
||||
"PASTA da imagem selecionada"
|
||||
163
locale/pt_BR/LC_MESSAGES/HDRMerge.po
Normal file
163
locale/pt_BR/LC_MESSAGES/HDRMerge.po
Normal file
@@ -0,0 +1,163 @@
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
#
|
||||
# Marcus Gama <marcus.gama@gmail.com>, 2021.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-09-28 19:37-0300\n"
|
||||
"PO-Revision-Date: 2021-10-01 19:40-0300\n"
|
||||
"Last-Translator: Marcus Gama <marcus.gama@gmail.com>\n"
|
||||
"Language-Team: Portuguese <darktable-dev@lists.darktable.org>\n"
|
||||
"Language: pt_BR\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||
"X-Generator: Lokalize 21.08.1\n"
|
||||
|
||||
#: ../contrib/HDRMerge.lua:175
|
||||
msgid "please update you binary location"
|
||||
msgstr "por favor, atualize a localização do binário"
|
||||
|
||||
#: ../contrib/HDRMerge.lua:194
|
||||
msgid "update successful"
|
||||
msgstr "atualização bem sucedida"
|
||||
|
||||
#: ../contrib/HDRMerge.lua:196
|
||||
msgid "update unsuccessful, please try again"
|
||||
msgstr "atualização mau sucedida, tente de novo"
|
||||
|
||||
#: ../contrib/HDRMerge.lua:210
|
||||
msgid "HDRMerge install issue"
|
||||
msgstr "problema com a instalação do HDRMerge"
|
||||
|
||||
#: ../contrib/HDRMerge.lua:211
|
||||
msgid "HDRMerge install issue, please ensure the binary path is proper"
|
||||
msgstr ""
|
||||
"problema com a instalação do HDRMerge, certifique-se de que o caminho do"
|
||||
" binário esteja correto"
|
||||
|
||||
#: ../contrib/HDRMerge.lua:216
|
||||
msgid "not enough images selected, select at least 2 images to merge"
|
||||
msgstr ""
|
||||
"imagens selecionadas insuficientes, selecione apenas 2 imagens para mesclar"
|
||||
|
||||
#: ../contrib/HDRMerge.lua:277
|
||||
msgid "HDRMerge completed successfully"
|
||||
msgstr "HDRMerge completado com sucesso"
|
||||
|
||||
#: ../contrib/HDRMerge.lua:279 ../contrib/HDRMerge.lua:280
|
||||
msgid "HDRMerge failed"
|
||||
msgstr "HDRMerge falhou"
|
||||
|
||||
#: ../contrib/HDRMerge.lua:289
|
||||
msgid "HDRMerge"
|
||||
msgstr "HDRMerge"
|
||||
|
||||
#: ../contrib/HDRMerge.lua:312
|
||||
msgid "HDRMerge options"
|
||||
msgstr "opções do HDRMerge"
|
||||
|
||||
#: ../contrib/HDRMerge.lua:317
|
||||
msgid "bits per sample"
|
||||
msgstr "bits por amostra"
|
||||
|
||||
#: ../contrib/HDRMerge.lua:318
|
||||
msgid "number of bits per sample in the output image"
|
||||
msgstr "número de bits por amostra na imagem de saída"
|
||||
|
||||
#: ../contrib/HDRMerge.lua:334
|
||||
msgid "embedded preview size"
|
||||
msgstr "tamanho da pré-visualização embutida"
|
||||
|
||||
#: ../contrib/HDRMerge.lua:335
|
||||
msgid "size of the embedded preview in output image"
|
||||
msgstr "tamanho da pré-visualização embutida na imagem de saída"
|
||||
|
||||
#: ../contrib/HDRMerge.lua:337 ../contrib/HDRMerge.lua:382
|
||||
msgid "none"
|
||||
msgstr "nenhum"
|
||||
|
||||
#: ../contrib/HDRMerge.lua:337
|
||||
msgid "half"
|
||||
msgstr "metade"
|
||||
|
||||
#: ../contrib/HDRMerge.lua:337
|
||||
msgid "full"
|
||||
msgstr "completo"
|
||||
|
||||
#: ../contrib/HDRMerge.lua:349
|
||||
msgid "batch mode"
|
||||
msgstr "modo em lote"
|
||||
|
||||
#: ../contrib/HDRMerge.lua:351
|
||||
msgid ""
|
||||
"enable batch mode operation \n"
|
||||
"NOTE: resultant files will NOT be auto-imported"
|
||||
msgstr ""
|
||||
"ativar a operação em modo em lote\n"
|
||||
"NOTA: arquivos resultantes NÃO serão importados automaticamente"
|
||||
|
||||
#: ../contrib/HDRMerge.lua:361
|
||||
msgid "batch gap [sec.]"
|
||||
msgstr "intervalo do lote [seg.]"
|
||||
|
||||
#: ../contrib/HDRMerge.lua:362
|
||||
msgid "gap, in seconds, between batch mode groups"
|
||||
msgstr "intervalo, em segundos, entre os grupos do modo em lote"
|
||||
|
||||
#: ../contrib/HDRMerge.lua:376
|
||||
msgid "import options"
|
||||
msgstr "opções de importação"
|
||||
|
||||
#: ../contrib/HDRMerge.lua:379
|
||||
msgid "apply style on import"
|
||||
msgstr "aplicar estilo ao importar"
|
||||
|
||||
#: ../contrib/HDRMerge.lua:380
|
||||
msgid "Apply selected style on auto-import to newly created image"
|
||||
msgstr ""
|
||||
"Aplica o estilo selecionado ao importar automaticamente para novas imagens"
|
||||
" criadas"
|
||||
|
||||
#: ../contrib/HDRMerge.lua:400
|
||||
msgid "copy tags"
|
||||
msgstr "copiar etiquetas"
|
||||
|
||||
#: ../contrib/HDRMerge.lua:402
|
||||
msgid "copy tags from first source image"
|
||||
msgstr "copia etiquetas da primeira imagem fonte"
|
||||
|
||||
#: ../contrib/HDRMerge.lua:409
|
||||
msgid ""
|
||||
"Additional tags to be added on import. Seperate with commas, all spaces will "
|
||||
"be removed"
|
||||
msgstr ""
|
||||
"Etiquetas adicionais a serem anexadas ao importar. Separar com vírgulas,"
|
||||
" todos os espaços serão removidos"
|
||||
|
||||
#: ../contrib/HDRMerge.lua:411
|
||||
msgid "Enter tags, seperated by commas"
|
||||
msgstr "Insira as etiquetas, separadas por vírgulas"
|
||||
|
||||
#: ../contrib/HDRMerge.lua:415
|
||||
msgid "merge"
|
||||
msgstr "mesclar"
|
||||
|
||||
#: ../contrib/HDRMerge.lua:416
|
||||
msgid "run HDRMerge with the above specified settings"
|
||||
msgstr "rodar o HDRMerge com as configurações especificadas acima"
|
||||
|
||||
#: ../contrib/HDRMerge.lua:420
|
||||
msgid "Select HDRmerge executable"
|
||||
msgstr "Selecionar o executável do HDRmerge"
|
||||
|
||||
#: ../contrib/HDRMerge.lua:425
|
||||
msgid "update"
|
||||
msgstr "atualizar"
|
||||
|
||||
#: ../contrib/HDRMerge.lua:426
|
||||
msgid "update the binary path with current value"
|
||||
msgstr "atualiza o caminho do binário com o valor atual"
|
||||
86
locale/pt_BR/LC_MESSAGES/OpenInExplorer.po
Normal file
86
locale/pt_BR/LC_MESSAGES/OpenInExplorer.po
Normal file
@@ -0,0 +1,86 @@
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
#
|
||||
# Marcus Gama <marcus.gama@gmail.com>, 2021.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-09-28 19:37-0300\n"
|
||||
"PO-Revision-Date: 2021-10-01 23:40-0300\n"
|
||||
"Last-Translator: Marcus Gama <marcus.gama@gmail.com>\n"
|
||||
"Language-Team: Portuguese <darktable-dev@lists.darktable.org>\n"
|
||||
"Language: pt_BR\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||
"X-Generator: Lokalize 21.08.1\n"
|
||||
|
||||
#: ../contrib/OpenInExplorer.lua:79
|
||||
msgid ""
|
||||
"OpenInExplorer plug-in only supports Linux, macOS, and Windows at this time"
|
||||
msgstr ""
|
||||
"Atualmente, o plugin OpenInExplorer somente suporta Linux, macOS e Windows"
|
||||
|
||||
#: ../contrib/OpenInExplorer.lua:95
|
||||
msgid ""
|
||||
"No links directory selected.\n"
|
||||
"Please check the dt preferences (lua options)"
|
||||
msgstr ""
|
||||
"Nenhum link para pasta selecionado.\n"
|
||||
"Verifique as preferências do darktable (opções lua)"
|
||||
|
||||
#: ../contrib/OpenInExplorer.lua:99
|
||||
#, lua-format
|
||||
msgid ""
|
||||
"Links directory '%s' not found.\n"
|
||||
"Please check the dt preferences (lua options)"
|
||||
msgstr ""
|
||||
"Links para pasta '%s' não encontrados.\n"
|
||||
"Verifique as preferências do darktable (opções lua)"
|
||||
|
||||
#: ../contrib/OpenInExplorer.lua:156
|
||||
msgid "Failed to create links. Missing rights?"
|
||||
msgstr "Falha ao criar links. Possui permissões adequadas?"
|
||||
|
||||
#: ../contrib/OpenInExplorer.lua:172
|
||||
msgid "Please select an image"
|
||||
msgstr "Por favor, selecione uma imagem"
|
||||
|
||||
#: ../contrib/OpenInExplorer.lua:178
|
||||
msgid "Please select fewer images (max. 15)"
|
||||
msgstr "Por favor, selecione menos imagens (máx 15)"
|
||||
|
||||
#: ../contrib/OpenInExplorer.lua:203
|
||||
msgid "show in file explorer"
|
||||
msgstr "mostrar no navegador de arquivos"
|
||||
|
||||
#: ../contrib/OpenInExplorer.lua:205
|
||||
msgid "Open the file manager at the selected image's location"
|
||||
msgstr "Abre o gerenciador de arquivos na localização das imagens selecionadas"
|
||||
|
||||
#: ../contrib/OpenInExplorer.lua:212
|
||||
msgid "OpenInExplorer: linked files directory"
|
||||
msgstr "OpenInExplorer: pasta de arquivos linkada"
|
||||
|
||||
#: ../contrib/OpenInExplorer.lua:213
|
||||
msgid ""
|
||||
"Directory to store the links to the file names. Requires restart to take "
|
||||
"effect"
|
||||
msgstr ""
|
||||
"Pasta para armazenar os links para os nomes de arquivo. Precisa reiniciar"
|
||||
" para ter efeito"
|
||||
|
||||
#: ../contrib/OpenInExplorer.lua:216
|
||||
msgid "Select directory"
|
||||
msgstr "Selecione a pasta"
|
||||
|
||||
#: ../contrib/OpenInExplorer.lua:222
|
||||
msgid "OpenInExplorer: use links"
|
||||
msgstr "OpenInExplorer: usar links"
|
||||
|
||||
#: ../contrib/OpenInExplorer.lua:223
|
||||
msgid "Use links instead of multiple windows. Requires restart to take effect"
|
||||
msgstr ""
|
||||
"Usa links ao invés de janelas múltiplas. Precisa reiniciar para ter efeito"
|
||||
74
locale/pt_BR/LC_MESSAGES/RL_out_sharp.po
Normal file
74
locale/pt_BR/LC_MESSAGES/RL_out_sharp.po
Normal file
@@ -0,0 +1,74 @@
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
#
|
||||
# Marcus Gama <marcus.gama@gmail.com>, 2021.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-09-28 19:37-0300\n"
|
||||
"PO-Revision-Date: 2021-10-02 05:31-0300\n"
|
||||
"Last-Translator: Marcus Gama <marcus.gama@gmail.com>\n"
|
||||
"Language-Team: Portuguese <darktable-dev@lists.darktable.org>\n"
|
||||
"Language: pt_BR\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||
"X-Generator: Lokalize 21.08.1\n"
|
||||
|
||||
#: ../contrib/RL_out_sharp.lua:119
|
||||
msgid "GMic executable not configured"
|
||||
msgstr "executável GMic não configurado"
|
||||
|
||||
#: ../contrib/RL_out_sharp.lua:139
|
||||
msgid "sharpening image "
|
||||
msgstr "melhorar nitidez da imagem "
|
||||
|
||||
#: ../contrib/RL_out_sharp.lua:154
|
||||
msgid "sharpening error"
|
||||
msgstr "erro ao melhorar nitidez"
|
||||
|
||||
#: ../contrib/RL_out_sharp.lua:163
|
||||
msgid "finished exporting"
|
||||
msgstr "exportação finalizada"
|
||||
|
||||
#: ../contrib/RL_out_sharp.lua:175 ../contrib/RL_out_sharp.lua:176
|
||||
msgid "select output folder"
|
||||
msgstr "selecionar pasta de saída"
|
||||
|
||||
#: ../contrib/RL_out_sharp.lua:185
|
||||
msgid "sigma"
|
||||
msgstr "sigma"
|
||||
|
||||
#: ../contrib/RL_out_sharp.lua:186
|
||||
msgid "controls the width of the blur that's applied"
|
||||
msgstr "controla a largura do desfoque que é aplicada"
|
||||
|
||||
#: ../contrib/RL_out_sharp.lua:197
|
||||
msgid "iterations"
|
||||
msgstr "iterações"
|
||||
|
||||
#: ../contrib/RL_out_sharp.lua:198
|
||||
msgid "increase for better sharpening, but slower"
|
||||
msgstr "aumente para melhor efeito, mas diminui velocidade"
|
||||
|
||||
#: ../contrib/RL_out_sharp.lua:209
|
||||
msgid "output jpg quality"
|
||||
msgstr "qualidade do jpg de saída"
|
||||
|
||||
#: ../contrib/RL_out_sharp.lua:210
|
||||
msgid "quality of the output jpg file"
|
||||
msgstr "qualidade do arquivo jpg de saída"
|
||||
|
||||
#: ../contrib/RL_out_sharp.lua:229
|
||||
msgid "RL output sharpen"
|
||||
msgstr "melhoria de nitidez na saída RL"
|
||||
|
||||
#: ../contrib/RL_out_sharp.lua:233
|
||||
msgid "executable for GMic CLI"
|
||||
msgstr "executável para o GMic CLI"
|
||||
|
||||
#: ../contrib/RL_out_sharp.lua:234
|
||||
msgid "select executable for GMic command line version"
|
||||
msgstr "selecione o executável para a versão de linha de comando do GMic"
|
||||
30
locale/pt_BR/LC_MESSAGES/clear_GPS.po
Normal file
30
locale/pt_BR/LC_MESSAGES/clear_GPS.po
Normal file
@@ -0,0 +1,30 @@
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
#
|
||||
# Marcus Gama <marcus.gama@gmail.com>, 2021.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-09-28 19:37-0300\n"
|
||||
"PO-Revision-Date: 2021-09-28 19:53-0300\n"
|
||||
"Last-Translator: Marcus Gama <marcus.gama@gmail.com>\n"
|
||||
"Language-Team: Portuguese <darktable-dev@lists.darktable.org>\n"
|
||||
"Language: pt_BR\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||
"X-Generator: Lokalize 21.08.1\n"
|
||||
|
||||
#: ../contrib/clear_GPS.lua:81
|
||||
msgid "clear GPS data"
|
||||
msgstr "limpar dados de GPS"
|
||||
|
||||
#: ../contrib/clear_GPS.lua:83
|
||||
msgid "Clear GPS data from selected images"
|
||||
msgstr "Limpa os dados de GPS das imagens selecionadas"
|
||||
|
||||
#: ../contrib/clear_GPS.lua:89
|
||||
msgid "Clear GPS data"
|
||||
msgstr "Limpar dados de GPS"
|
||||
90
locale/pt_BR/LC_MESSAGES/color_profile_manager.po
Normal file
90
locale/pt_BR/LC_MESSAGES/color_profile_manager.po
Normal file
@@ -0,0 +1,90 @@
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
#
|
||||
# Marcus Gama <marcus.gama@gmail.com>, 2021.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-09-28 19:37-0300\n"
|
||||
"PO-Revision-Date: 2021-09-30 19:05-0300\n"
|
||||
"Last-Translator: Marcus Gama <marcus.gama@gmail.com>\n"
|
||||
"Language-Team: Portuguese <darktable-dev@lists.darktable.org>\n"
|
||||
"Language: pt_BR\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||
"X-Generator: Lokalize 21.08.1\n"
|
||||
|
||||
#: ../contrib/color_profile_manager.lua:122
|
||||
msgid "added color profile "
|
||||
msgstr "perfil de cor adicionado "
|
||||
|
||||
#: ../contrib/color_profile_manager.lua:128
|
||||
msgid "removed color profile "
|
||||
msgstr "perfil de cor removido "
|
||||
|
||||
#: ../contrib/color_profile_manager.lua:146
|
||||
msgid "ERROR: color profile must be an icc or icm file"
|
||||
msgstr "ERRO: perfil de cor deve ser um arquivo icm ou icc"
|
||||
|
||||
#: ../contrib/color_profile_manager.lua:229
|
||||
msgid "color profile manager"
|
||||
msgstr "gerenciador de perfil de cor"
|
||||
|
||||
#: ../contrib/color_profile_manager.lua:270
|
||||
msgid "initialize color profiles"
|
||||
msgstr "inicializar perfis de cor"
|
||||
|
||||
#: ../contrib/color_profile_manager.lua:271
|
||||
msgid "create the directory structure to contain the color profiles"
|
||||
msgstr "cria a estrutura de pasta para conter os perfis de cor"
|
||||
|
||||
#: ../contrib/color_profile_manager.lua:286
|
||||
msgid "select profile set"
|
||||
msgstr "selecionar definição de perfil"
|
||||
|
||||
#: ../contrib/color_profile_manager.lua:287
|
||||
msgid "select input or output profiles"
|
||||
msgstr "selecionar perfis de entrada ou saída"
|
||||
|
||||
#: ../contrib/color_profile_manager.lua:294
|
||||
msgid "input"
|
||||
msgstr "entrada"
|
||||
|
||||
#: ../contrib/color_profile_manager.lua:294
|
||||
msgid "output"
|
||||
msgstr "saída"
|
||||
|
||||
#: ../contrib/color_profile_manager.lua:298
|
||||
msgid "select color profile to add"
|
||||
msgstr "selecionar perfil de cor a adicionar"
|
||||
|
||||
#: ../contrib/color_profile_manager.lua:299
|
||||
msgid "select the .icc or .icm file to add"
|
||||
msgstr "selecionar arquivo icc ou icm a adicionar"
|
||||
|
||||
#: ../contrib/color_profile_manager.lua:306
|
||||
msgid "add profile"
|
||||
msgstr "adicionar perfil"
|
||||
|
||||
#: ../contrib/color_profile_manager.lua:309
|
||||
msgid "add selected color profile"
|
||||
msgstr "adicionar perfil de cor selecionado"
|
||||
|
||||
#: ../contrib/color_profile_manager.lua:310
|
||||
msgid "add selected file to profiles"
|
||||
msgstr "adicionar arquivo selecionado aos perfis"
|
||||
|
||||
#: ../contrib/color_profile_manager.lua:320
|
||||
msgid "remove profile"
|
||||
msgstr "remover perfil"
|
||||
|
||||
#: ../contrib/color_profile_manager.lua:323
|
||||
msgid "remove selected profile(s)"
|
||||
msgstr "remover perfil(s) selecionado(s)"
|
||||
|
||||
#: ../contrib/color_profile_manager.lua:324
|
||||
msgid "remove the checked profile(s)"
|
||||
msgstr "remover o(s) perfil(s) marcado(s)"
|
||||
86
locale/pt_BR/LC_MESSAGES/copy_attach_detach_tags.po
Normal file
86
locale/pt_BR/LC_MESSAGES/copy_attach_detach_tags.po
Normal file
@@ -0,0 +1,86 @@
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
#
|
||||
# Marcus Gama <marcus.gama@gmail.com>, 2021.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-09-28 19:37-0300\n"
|
||||
"PO-Revision-Date: 2021-09-28 19:52-0300\n"
|
||||
"Last-Translator: Marcus Gama <marcus.gama@gmail.com>\n"
|
||||
"Language-Team: Portuguese <darktable-dev@lists.darktable.org>\n"
|
||||
"Language: pt_BR\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||
"X-Generator: Lokalize 21.08.1\n"
|
||||
|
||||
#: ../contrib/copy_attach_detach_tags.lua:101
|
||||
msgid "Image tags copied ..."
|
||||
msgstr "Etiquetas de imagem copiadas ..."
|
||||
|
||||
#: ../contrib/copy_attach_detach_tags.lua:123
|
||||
msgid "No tag to attach, please copy tags first."
|
||||
msgstr "Nenhuma etiqueta anexada, por favor copie as etiquetas primeiro."
|
||||
|
||||
#: ../contrib/copy_attach_detach_tags.lua:147
|
||||
msgid "Tags attached ..."
|
||||
msgstr "Etiquetas anexadas ..."
|
||||
|
||||
#: ../contrib/copy_attach_detach_tags.lua:163
|
||||
msgid "Tags removed from image(s)."
|
||||
msgstr "Etiquetas removidas da(s) imagem(ns) "
|
||||
|
||||
#: ../contrib/copy_attach_detach_tags.lua:169
|
||||
msgid "Tags replaced"
|
||||
msgstr "Etiquetas substituídas"
|
||||
|
||||
#: ../contrib/copy_attach_detach_tags.lua:174
|
||||
msgid "tagging addon"
|
||||
msgstr "addon de etiquetas"
|
||||
|
||||
#: ../contrib/copy_attach_detach_tags.lua:204
|
||||
#: ../contrib/copy_attach_detach_tags.lua:241
|
||||
#: ../contrib/copy_attach_detach_tags.lua:294
|
||||
msgid "copy tags from selected image(s)"
|
||||
msgstr "copiar etiquetas da(s) imagem(ns) selecionada(s)"
|
||||
|
||||
#: ../contrib/copy_attach_detach_tags.lua:209
|
||||
#: ../contrib/copy_attach_detach_tags.lua:244
|
||||
#: ../contrib/copy_attach_detach_tags.lua:299
|
||||
msgid "paste tags to selected image(s)"
|
||||
msgstr "colar etiquetas para a(s) imagem(ns) selecionada(s)"
|
||||
|
||||
#: ../contrib/copy_attach_detach_tags.lua:214
|
||||
#: ../contrib/copy_attach_detach_tags.lua:257
|
||||
#: ../contrib/copy_attach_detach_tags.lua:304
|
||||
msgid "remove tags from selected image(s)"
|
||||
msgstr "remover etiquetas da(s) imagem(ns) selecionada(s)"
|
||||
|
||||
#: ../contrib/copy_attach_detach_tags.lua:219
|
||||
#: ../contrib/copy_attach_detach_tags.lua:253
|
||||
#: ../contrib/copy_attach_detach_tags.lua:309
|
||||
msgid "replace tags from selected image(s)"
|
||||
msgstr "substituir etiquetas a partir da(s) imagem(ns) selecionada(s)"
|
||||
|
||||
#: ../contrib/copy_attach_detach_tags.lua:232
|
||||
msgid "tag clipboard"
|
||||
msgstr "área de transferência de etiqueta"
|
||||
|
||||
#: ../contrib/copy_attach_detach_tags.lua:240
|
||||
msgid "multi copy tags"
|
||||
msgstr "copiar etiquetas múltiplas"
|
||||
|
||||
#: ../contrib/copy_attach_detach_tags.lua:245
|
||||
msgid "paste tags"
|
||||
msgstr "colar etiquetas"
|
||||
|
||||
#: ../contrib/copy_attach_detach_tags.lua:252
|
||||
msgid "replace tags"
|
||||
msgstr "substituir etiquetas"
|
||||
|
||||
#: ../contrib/copy_attach_detach_tags.lua:256
|
||||
msgid "remove all tags"
|
||||
msgstr "remover todas as etiquetas"
|
||||
34
locale/pt_BR/LC_MESSAGES/copy_paste_metadata.po
Normal file
34
locale/pt_BR/LC_MESSAGES/copy_paste_metadata.po
Normal file
@@ -0,0 +1,34 @@
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
#
|
||||
# Marcus Gama <marcus.gama@gmail.com>, 2021.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-09-28 14:57-0300\n"
|
||||
"PO-Revision-Date: 2021-09-28 19:38-0300\n"
|
||||
"Language: pt_BR\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Last-Translator: Marcus Gama <marcus.gama@gmail.com>\n"
|
||||
"Language-Team: Portuguese <darktable-dev@lists.darktable.org>\n"
|
||||
"X-Generator: Lokalize 21.08.1\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||
|
||||
#: copy_paste_metadata.lua:131
|
||||
msgid "copy metadata"
|
||||
msgstr "copiar metadados"
|
||||
|
||||
#: copy_paste_metadata.lua:133
|
||||
msgid "copy metadata of the first selected image"
|
||||
msgstr "copiar metadados da primeira imagem selecionada"
|
||||
|
||||
#: copy_paste_metadata.lua:139
|
||||
msgid "paste metadata"
|
||||
msgstr "colar metadados"
|
||||
|
||||
#: copy_paste_metadata.lua:141
|
||||
msgid "paste metadata to the selected images"
|
||||
msgstr "colar metadados para as imagens selecionadas"
|
||||
61
locale/pt_BR/LC_MESSAGES/enfuse.po
Normal file
61
locale/pt_BR/LC_MESSAGES/enfuse.po
Normal file
@@ -0,0 +1,61 @@
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
#
|
||||
# Marcus Gama <marcus.gama@gmail.com>, 2021.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-09-28 15:19-0300\n"
|
||||
"PO-Revision-Date: 2021-09-28 19:39-0300\n"
|
||||
"Language: pt_BR\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Last-Translator: Marcus Gama <marcus.gama@gmail.com>\n"
|
||||
"Language-Team: Portuguese <darktable-dev@lists.darktable.org>\n"
|
||||
"X-Generator: Lokalize 21.08.1\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||
|
||||
#: enfuse.lua:187
|
||||
#, lua-format
|
||||
msgid "Error writing to `%s`"
|
||||
msgstr "Erro ao salvar `%s`"
|
||||
|
||||
#: enfuse.lua:210
|
||||
#, lua-format
|
||||
msgid "Converting raw file '%s' to tiff..."
|
||||
msgstr "Converter arquivo raw `%s` para tiff..."
|
||||
|
||||
#: enfuse.lua:220
|
||||
#, lua-format
|
||||
msgid "Skipping %s..."
|
||||
msgstr "Pulando %s..."
|
||||
|
||||
#: enfuse.lua:227
|
||||
msgid "No suitable images selected, nothing to do for enfuse"
|
||||
msgstr "Nenhuma imagem adequada selecionado, nada a fazer para o script"
|
||||
|
||||
#: enfuse.lua:233
|
||||
#, lua-format
|
||||
msgid "%d image(s) skipped"
|
||||
msgstr "%d imagem(ns) pulada(s)"
|
||||
|
||||
#: enfuse.lua:253
|
||||
msgid "Enfuse failed, see terminal output for details"
|
||||
msgstr "Script falhou, veja a saída do terminal para detalhes"
|
||||
|
||||
#: enfuse.lua:265
|
||||
msgid "enfuse was successful, resulting image has been imported"
|
||||
msgstr "script foi bem sucedido, imagem resultante foi importada"
|
||||
|
||||
#: enfuse.lua:267
|
||||
#, lua-format
|
||||
msgid "enfuse: done, resulting image '%s' has been imported with id %d"
|
||||
msgstr "enfuse: feito, imagem '%s' resultante foi importada com o id %d"
|
||||
|
||||
#: enfuse.lua:301
|
||||
msgid "Could not find enfuse executable. Not loading enfuse exporter..."
|
||||
msgstr ""
|
||||
"Não foi possível encontrar o executável do enfuse. Exportador do enfuse não"
|
||||
" carregado..."
|
||||
555
locale/pt_BR/LC_MESSAGES/enfuseAdvanced.po
Normal file
555
locale/pt_BR/LC_MESSAGES/enfuseAdvanced.po
Normal file
@@ -0,0 +1,555 @@
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
#
|
||||
# Marcus Gama <marcus.gama@gmail.com>, 2021.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-09-28 19:37-0300\n"
|
||||
"PO-Revision-Date: 2021-10-01 19:03-0300\n"
|
||||
"Last-Translator: Marcus Gama <marcus.gama@gmail.com>\n"
|
||||
"Language-Team: Portuguese <darktable-dev@lists.darktable.org>\n"
|
||||
"Language: pt_BR\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||
"X-Generator: Lokalize 21.08.1\n"
|
||||
|
||||
#: ../contrib/enfuseAdvanced.lua:250
|
||||
msgid "please update your binary locations"
|
||||
msgstr "por favor, atualiza suas localizações de binários"
|
||||
|
||||
#: ../contrib/enfuseAdvanced.lua:262
|
||||
msgid "issue with "
|
||||
msgstr "problema com "
|
||||
|
||||
#: ../contrib/enfuseAdvanced.lua:262
|
||||
msgid " executable"
|
||||
msgstr " executável"
|
||||
|
||||
#: ../contrib/enfuseAdvanced.lua:271
|
||||
msgid "update successful"
|
||||
msgstr "atualização bem sucedida"
|
||||
|
||||
#: ../contrib/enfuseAdvanced.lua:273
|
||||
msgid "update unsuccessful, please try again"
|
||||
msgstr "atualização mau sucedida, tente novamente"
|
||||
|
||||
#: ../contrib/enfuseAdvanced.lua:379
|
||||
msgid "saved to "
|
||||
msgstr "salvar para "
|
||||
|
||||
#: ../contrib/enfuseAdvanced.lua:395
|
||||
msgid "loaded from "
|
||||
msgstr "carregado de "
|
||||
|
||||
#: ../contrib/enfuseAdvanced.lua:430
|
||||
msgid "export for image fusion "
|
||||
msgstr "exportar para fusão de imagem "
|
||||
|
||||
#: ../contrib/enfuseAdvanced.lua:435
|
||||
msgid "too few images selected, please select at least 2 images"
|
||||
msgstr "muito poucas imagens selecionadas, selecione pelo menos 2 imagens"
|
||||
|
||||
#: ../contrib/enfuseAdvanced.lua:438
|
||||
msgid "installation error, please verify binary paths are proper"
|
||||
msgstr ""
|
||||
"erro de instalação, verifique se as localizações dos binários estão corretas"
|
||||
|
||||
#: ../contrib/enfuseAdvanced.lua:458 ../contrib/enfuseAdvanced.lua:459
|
||||
#: ../contrib/enfuseAdvanced.lua:485 ../contrib/enfuseAdvanced.lua:486
|
||||
msgid " failed"
|
||||
msgstr " falhou"
|
||||
|
||||
#: ../contrib/enfuseAdvanced.lua:534
|
||||
msgid "image align options"
|
||||
msgstr "opções de alinhamento de imagem"
|
||||
|
||||
#: ../contrib/enfuseAdvanced.lua:537
|
||||
msgid "align images"
|
||||
msgstr "alinhar imagens"
|
||||
|
||||
#: ../contrib/enfuseAdvanced.lua:539
|
||||
msgid "automatically align images prior to enfuse"
|
||||
msgstr "alinha automaticamente as imagens antes de fundir"
|
||||
|
||||
#: ../contrib/enfuseAdvanced.lua:549
|
||||
msgid "optimize radial distortion"
|
||||
msgstr "otimizar distorção radial"
|
||||
|
||||
#: ../contrib/enfuseAdvanced.lua:551
|
||||
msgid ""
|
||||
"optimize radial distortion for all images, \n"
|
||||
"except for first"
|
||||
msgstr ""
|
||||
"otimiza a distorção radial para todas as imagens, \n"
|
||||
"exceto para a primeira"
|
||||
|
||||
#: ../contrib/enfuseAdvanced.lua:556
|
||||
msgid "optimize field of view"
|
||||
msgstr "otimizar o campo de visão"
|
||||
|
||||
#: ../contrib/enfuseAdvanced.lua:558
|
||||
msgid ""
|
||||
"optimize field of view for all images, except for first. \n"
|
||||
"Useful for aligning focus stacks (DFF) with slightly \n"
|
||||
"different magnification."
|
||||
msgstr ""
|
||||
"otimizar o campo de visão para todas as imagens, exceto para a primeira. \n"
|
||||
"Útil para alinhar foco empilhado (DFF, sigla em inglês) com ampliação \n"
|
||||
"ligeiramente diferente."
|
||||
|
||||
#: ../contrib/enfuseAdvanced.lua:563
|
||||
msgid "optimize image center shift"
|
||||
msgstr "otimizar deslocamento do centro da imagem"
|
||||
|
||||
#: ../contrib/enfuseAdvanced.lua:565
|
||||
msgid ""
|
||||
"optimize image center shift for all images, \n"
|
||||
"except for first."
|
||||
msgstr ""
|
||||
"otimiza o deslocamento do centro da imagem para\n"
|
||||
"todas as imagens, exceto a primeira."
|
||||
|
||||
#: ../contrib/enfuseAdvanced.lua:570
|
||||
msgid "auto crop"
|
||||
msgstr "recorte automático"
|
||||
|
||||
#: ../contrib/enfuseAdvanced.lua:572
|
||||
msgid "auto crop the image to the area covered by all images."
|
||||
msgstr ""
|
||||
"recorta automaticamente a imagem para a área coberta por todas\n"
|
||||
"as imagens."
|
||||
|
||||
#: ../contrib/enfuseAdvanced.lua:577
|
||||
msgid "load distortion from lens database"
|
||||
msgstr "carregar distorção a partir da base de dados de lentes"
|
||||
|
||||
#: ../contrib/enfuseAdvanced.lua:579
|
||||
msgid "try to load distortion information from lens database"
|
||||
msgstr "tenta carregar informações de distorção da base de dados de lentes"
|
||||
|
||||
#: ../contrib/enfuseAdvanced.lua:584
|
||||
msgid "use gpu"
|
||||
msgstr "usar gpu"
|
||||
|
||||
#: ../contrib/enfuseAdvanced.lua:586
|
||||
msgid "use gpu during alignment"
|
||||
msgstr "usa a gpu durante o alinhamento"
|
||||
|
||||
#: ../contrib/enfuseAdvanced.lua:593
|
||||
msgid "image grid size"
|
||||
msgstr "tamanho da grade de imagem"
|
||||
|
||||
#: ../contrib/enfuseAdvanced.lua:594
|
||||
msgid ""
|
||||
"break image into a rectangular grid \n"
|
||||
"and attempt to find num control points in each section.\n"
|
||||
"default: (5x5)"
|
||||
msgstr ""
|
||||
"quebra a imagem em uma grade retangular e \n"
|
||||
"tenta encontrar um número de pontos de controle\n"
|
||||
"em cada seção.\n"
|
||||
"padrão: (5x5)"
|
||||
|
||||
#: ../contrib/enfuseAdvanced.lua:610
|
||||
msgid "control points/grid"
|
||||
msgstr "pontos de controle/grade"
|
||||
|
||||
#: ../contrib/enfuseAdvanced.lua:611
|
||||
msgid ""
|
||||
"number of control points (per grid, see option -g) \n"
|
||||
"to create between adjacent images \n"
|
||||
"default: (8)."
|
||||
msgstr ""
|
||||
"número de pontos de controle (por grade, veja a opção -g)\n"
|
||||
"para criar entre imagens adjacentes \n"
|
||||
"padrão: (8)"
|
||||
|
||||
#: ../contrib/enfuseAdvanced.lua:627
|
||||
msgid "remove control points with error"
|
||||
msgstr "remover pontos de controle com erro"
|
||||
|
||||
#: ../contrib/enfuseAdvanced.lua:628
|
||||
msgid ""
|
||||
"remove all control points with an error higher \n"
|
||||
"than num pixels \n"
|
||||
"default: (3)"
|
||||
msgstr ""
|
||||
"remove todos os pontos de controle com um erro superior\n"
|
||||
"que um número de pixels\n"
|
||||
"padrão: (3)"
|
||||
|
||||
#: ../contrib/enfuseAdvanced.lua:644
|
||||
msgid "correlation threshold for control points"
|
||||
msgstr "limiar de correlação para pontos de controle"
|
||||
|
||||
#: ../contrib/enfuseAdvanced.lua:645
|
||||
msgid ""
|
||||
"correlation threshold for identifying \n"
|
||||
"control points \n"
|
||||
"default: (0.9)."
|
||||
msgstr ""
|
||||
"limiar de correlação para identificar pontos\n"
|
||||
"de controle\n"
|
||||
"padrão: (0,9)"
|
||||
|
||||
#: ../contrib/enfuseAdvanced.lua:659
|
||||
msgid "image fusion options"
|
||||
msgstr "opções de fusão de imagem"
|
||||
|
||||
#: ../contrib/enfuseAdvanced.lua:664
|
||||
msgid "exposure weight"
|
||||
msgstr "peso da exposição"
|
||||
|
||||
#: ../contrib/enfuseAdvanced.lua:665
|
||||
msgid ""
|
||||
"set the relative weight of the well-exposedness criterion \n"
|
||||
"as defined by the chosen exposure weight function. \n"
|
||||
"increasing this weight relative to the others will\n"
|
||||
" make well-exposed pixels contribute more to\n"
|
||||
" the final output. \n"
|
||||
"default: (1.0)"
|
||||
msgstr ""
|
||||
"configura o peso relativo do critério de boa exposição como\n"
|
||||
"definido pela função de peso de exposição.\n"
|
||||
"aumentar este peso relativo para outros fará com que\n"
|
||||
"os pixels bem expostos contribuam mais para a saída\n"
|
||||
"final.\n"
|
||||
"padrão: (1,0)"
|
||||
|
||||
#: ../contrib/enfuseAdvanced.lua:676
|
||||
msgid "saturation weight"
|
||||
msgstr "peso da saturação"
|
||||
|
||||
#: ../contrib/enfuseAdvanced.lua:677
|
||||
msgid ""
|
||||
"set the relative weight of high-saturation pixels. \n"
|
||||
"increasing this weight makes pixels with high \n"
|
||||
"saturation contribute more to the final output. \n"
|
||||
"default: (0.2)"
|
||||
msgstr ""
|
||||
"configura o peso relativo dos pixels altamente saturados.\n"
|
||||
"aumentar este peso fará com que os pixels com alta saturação\n"
|
||||
"contribuam mais para a saída final. "
|
||||
"padrão: (0,2)"
|
||||
|
||||
#: ../contrib/enfuseAdvanced.lua:688
|
||||
msgid "contrast weight"
|
||||
msgstr "peso do contraste"
|
||||
|
||||
#: ../contrib/enfuseAdvanced.lua:689
|
||||
msgid ""
|
||||
"sets the relative weight of high local-contrast pixels. \n"
|
||||
"default: (0.0)."
|
||||
msgstr ""
|
||||
"configura o peso relativo dos pixels com alto contraste local.\n"
|
||||
"padrão: (0,0)"
|
||||
|
||||
#: ../contrib/enfuseAdvanced.lua:700
|
||||
msgid "exposure optimum"
|
||||
msgstr "exposição ótima"
|
||||
|
||||
#: ../contrib/enfuseAdvanced.lua:701
|
||||
msgid ""
|
||||
"determine at what normalized exposure value\n"
|
||||
" the optimum exposure of the input images\n"
|
||||
" is. this is, set the position of the maximum\n"
|
||||
" of the exposure weight curve. use this \n"
|
||||
"option to fine-tune exposure weighting. \n"
|
||||
"default: (0.5)"
|
||||
msgstr ""
|
||||
"determina qual valor de exposição normalizado\n"
|
||||
"é a exposição ótima da imagem de entrada.\n"
|
||||
"isto é, define a posição do máximo de exposição\n"
|
||||
"da curva de peso. use esta opção para ajustar o\n"
|
||||
"peso da exposição.\n"
|
||||
"padrão: (0,5)"
|
||||
|
||||
#: ../contrib/enfuseAdvanced.lua:712
|
||||
msgid "exposure width"
|
||||
msgstr "largura da exposição"
|
||||
|
||||
#: ../contrib/enfuseAdvanced.lua:713
|
||||
msgid ""
|
||||
"set the characteristic width (FWHM) of the exposure \n"
|
||||
"weight function. low numbers give less weight to \n"
|
||||
"pixels that are far from the user-defined \n"
|
||||
"optimum and vice versa. use this option to \n"
|
||||
"fine-tune exposure weighting. \n"
|
||||
"default: (0.2)"
|
||||
msgstr ""
|
||||
"configura a largura característica (FWHM) da função de peso\n"
|
||||
"da exposição. números baixos atribuem menos peso para os\n"
|
||||
"pixels que estão longe do ótimo definido pelo usuário e vice-\n"
|
||||
"versa. use esta opção para ajustar o peso da exposição.\n"
|
||||
"padrão: (0,2)"
|
||||
|
||||
#: ../contrib/enfuseAdvanced.lua:722
|
||||
msgid "hard mask"
|
||||
msgstr "máscara dura"
|
||||
|
||||
#: ../contrib/enfuseAdvanced.lua:724
|
||||
msgid ""
|
||||
"force hard blend masks on the finest scale. this avoids \n"
|
||||
"averaging of fine details (only), at the expense \n"
|
||||
"of increasing the noise. this improves the \n"
|
||||
"sharpness of focus stacks considerably.\n"
|
||||
"default (soft mask)"
|
||||
msgstr ""
|
||||
"força máscaras de mesclagem duras na escala mais fina. isto\n"
|
||||
"previne aproximação dos detalhes mais finos (somente), ao\n"
|
||||
"custo de aumentar o ruído. isto melhora a nitidez do empilha-\n"
|
||||
"mento de foco consideravelmente.\n"
|
||||
"padrão (máscara suave)"
|
||||
|
||||
#: ../contrib/enfuseAdvanced.lua:729
|
||||
msgid "save masks"
|
||||
msgstr "salvar máscaras"
|
||||
|
||||
#: ../contrib/enfuseAdvanced.lua:731
|
||||
msgid ""
|
||||
"Save the generated weight masks to your home directory,\n"
|
||||
"enblend saves masks as 8 bit grayscale, \n"
|
||||
"i.e. single channel images. \n"
|
||||
"for accuracy we recommend to choose a lossless format."
|
||||
msgstr ""
|
||||
"Salva as máscaras de peso geradas para sua pasta pessoal,\n"
|
||||
"mescla máscaras salvas como tons de cinza de 8 bits, isto é,\n"
|
||||
"imagens de canal simples.\n"
|
||||
"para maior precisão, nós recomendamos escolher um formato\n"
|
||||
"sem perdas."
|
||||
|
||||
#: ../contrib/enfuseAdvanced.lua:738
|
||||
msgid "contrast window size"
|
||||
msgstr "tamanho da janela de contraste"
|
||||
|
||||
#: ../contrib/enfuseAdvanced.lua:739
|
||||
msgid ""
|
||||
"set the window size for local contrast analysis. \n"
|
||||
"the window will be a square of size × size pixels. \n"
|
||||
"if given an even size, Enfuse will \n"
|
||||
"automatically use the next odd number.\n"
|
||||
"for contrast analysis size values larger \n"
|
||||
"than 5 pixels might result in a \n"
|
||||
"blurry composite image. values of 3 and \n"
|
||||
"5 pixels have given good results on \n"
|
||||
"focus stacks. \n"
|
||||
"default: (5) pixels"
|
||||
msgstr ""
|
||||
"configura o tamanho da janela para a análise de contraste local.\n"
|
||||
"a janela será um quadrado de tamanho x tamanho em pixels.\n"
|
||||
"se fornecido um tamanho par, o script usará automaticamente\n"
|
||||
"o próximo número ímpar.\n"
|
||||
"valores de tamanho para análise de contraste maiores que\n"
|
||||
"5 pixels podem resultar em uma imagem composta borrada.\n"
|
||||
"valores de 3 e 5 pixels produzem bons resultados para empi-\n"
|
||||
"lhamento de foco.\n"
|
||||
"padrão: (5) pixels"
|
||||
|
||||
#: ../contrib/enfuseAdvanced.lua:755
|
||||
msgid "contrast edge scale"
|
||||
msgstr "escala de borda de contraste"
|
||||
|
||||
#: ../contrib/enfuseAdvanced.lua:756
|
||||
msgid ""
|
||||
"a non-zero value for EDGE-SCALE switches on the \n"
|
||||
"Laplacian-of-Gaussian (LoG) edge detection algorithm.\n"
|
||||
" edage-scale is the radius of the Gaussian used \n"
|
||||
"in the search for edges. a positive LCE-SCALE \n"
|
||||
"turns on local contrast enhancement (LCE) \n"
|
||||
"before the LoG edge detection. \n"
|
||||
"Default: (0.0) pixels."
|
||||
msgstr ""
|
||||
"um valor diferente de zero para a ESCALA DE BORDA alterna\n"
|
||||
"o algoritmo de detecção de borda Laplaciano-de-Gaussiano (LoG).\n"
|
||||
"a escala de borda é o raio do Gaussiano usado na busca por bordas.\n"
|
||||
"uma escala LCE positiva ativa o melhoramento de contraste local (LCE)\n"
|
||||
"antes da detecção de borda LoG.\n"
|
||||
"Padrão: (0,0) pixels"
|
||||
|
||||
#: ../contrib/enfuseAdvanced.lua:772
|
||||
msgid "contrast min curvature [%]"
|
||||
msgstr "curvatura mín de contraste [%]"
|
||||
|
||||
#: ../contrib/enfuseAdvanced.lua:773
|
||||
msgid ""
|
||||
"define the minimum curvature for the LoG edge detection. Append a ‘%’ to "
|
||||
"specify the minimum curvature relative to maximum pixel value in the source "
|
||||
"image. Default: (0.0%)"
|
||||
msgstr ""
|
||||
"configura a curvatura mínima para a detecção de borda LoG. Adicionar um '%'"
|
||||
" para "
|
||||
"definir a curvatura mínima em relação ao valor máximo de pixel na imagem"
|
||||
" fonte. "
|
||||
"Padrão: (0,0%)"
|
||||
|
||||
#: ../contrib/enfuseAdvanced.lua:787
|
||||
msgid "target file"
|
||||
msgstr "arquivo alvo"
|
||||
|
||||
#: ../contrib/enfuseAdvanced.lua:792
|
||||
msgid "tiff compression"
|
||||
msgstr "compressão tiff"
|
||||
|
||||
#: ../contrib/enfuseAdvanced.lua:793
|
||||
msgid "compression method for tiff files"
|
||||
msgstr "método de compressão para arquivos tiff"
|
||||
|
||||
#: ../contrib/enfuseAdvanced.lua:809
|
||||
msgid "jpeg compression"
|
||||
msgstr "compressão jpeg"
|
||||
|
||||
#: ../contrib/enfuseAdvanced.lua:810
|
||||
msgid "jpeg compression level"
|
||||
msgstr "nível de compressão jpeg"
|
||||
|
||||
#: ../contrib/enfuseAdvanced.lua:832
|
||||
msgid "file format"
|
||||
msgstr "formato de arquivo"
|
||||
|
||||
#: ../contrib/enfuseAdvanced.lua:833
|
||||
msgid "file format of the enfused final image"
|
||||
msgstr "formato de arquivo da imagem final fundida"
|
||||
|
||||
#: ../contrib/enfuseAdvanced.lua:853
|
||||
msgid "bit depth"
|
||||
msgstr "profundidade de bits"
|
||||
|
||||
#: ../contrib/enfuseAdvanced.lua:854
|
||||
msgid "bit depth of the enfused file"
|
||||
msgstr "profundidade de bits do arquivo fundido"
|
||||
|
||||
#: ../contrib/enfuseAdvanced.lua:868
|
||||
msgid "directory"
|
||||
msgstr "pasta"
|
||||
|
||||
#: ../contrib/enfuseAdvanced.lua:877
|
||||
msgid ""
|
||||
"select the target directory for the fused image. \n"
|
||||
"the filename is created automatically."
|
||||
msgstr ""
|
||||
"seleciona a pasta alvo para a imagem fundida.\n"
|
||||
"o nome do arquivo é criado automaticamente."
|
||||
|
||||
#: ../contrib/enfuseAdvanced.lua:882
|
||||
msgid "save to source image location"
|
||||
msgstr "salvar para a localização da imagem fonte"
|
||||
|
||||
#: ../contrib/enfuseAdvanced.lua:884
|
||||
msgid ""
|
||||
"If checked ignores the location above and saves output image(s) to the same "
|
||||
"location as the source images."
|
||||
msgstr ""
|
||||
"Se selecionado, ignora a localização acima e salva a(s) imagem(ns) de saída"
|
||||
" na mesma "
|
||||
"localização das imagens fonte."
|
||||
|
||||
#: ../contrib/enfuseAdvanced.lua:891
|
||||
msgid "on conflict"
|
||||
msgstr "no caso de conflito"
|
||||
|
||||
#: ../contrib/enfuseAdvanced.lua:905
|
||||
msgid "auto import"
|
||||
msgstr "importar automaticamente"
|
||||
|
||||
#: ../contrib/enfuseAdvanced.lua:907
|
||||
msgid "import the image into darktable database when enfuse completes"
|
||||
msgstr ""
|
||||
"importa a imagem para a base de dados do darktable quando a fusão for"
|
||||
" completada"
|
||||
|
||||
#: ../contrib/enfuseAdvanced.lua:918
|
||||
msgid "Apply Style on Import"
|
||||
msgstr "Aplicar estilo ao importar"
|
||||
|
||||
#: ../contrib/enfuseAdvanced.lua:919
|
||||
msgid "Apply selected style on auto-import to newly created blended image"
|
||||
msgstr ""
|
||||
"Aplica o estilo selecionado ao importar automaticamente para a nova imagem"
|
||||
" fundida criada"
|
||||
|
||||
#: ../contrib/enfuseAdvanced.lua:938
|
||||
msgid "copy tags"
|
||||
msgstr "copiar etiquetas"
|
||||
|
||||
#: ../contrib/enfuseAdvanced.lua:940
|
||||
msgid "Copy tags from first image."
|
||||
msgstr "Copia as etiquetas da primeira imagem."
|
||||
|
||||
#: ../contrib/enfuseAdvanced.lua:947
|
||||
msgid ""
|
||||
"Additional tags to be added on import. Seperate with commas, all spaces will "
|
||||
"be removed"
|
||||
msgstr ""
|
||||
"Etiquetas adicionais a serem adicionadas ao importar. Separe-as com vírgulas,"
|
||||
" todos "
|
||||
"os espaços serão removidos"
|
||||
|
||||
#: ../contrib/enfuseAdvanced.lua:955
|
||||
msgid "active preset"
|
||||
msgstr "predefinição ativa"
|
||||
|
||||
#: ../contrib/enfuseAdvanced.lua:956
|
||||
msgid "preset to be loaded from or saved to"
|
||||
msgstr "predefinição a ser carregada de ou salvada para"
|
||||
|
||||
#: ../contrib/enfuseAdvanced.lua:970
|
||||
msgid "load fusion preset"
|
||||
msgstr "carregar predefinição de fusão"
|
||||
|
||||
#: ../contrib/enfuseAdvanced.lua:971
|
||||
msgid "load current fusion parameters from selected preset"
|
||||
msgstr ""
|
||||
"carrega parâmetros de fusão atuais a partir da predefinição selecionada"
|
||||
|
||||
#: ../contrib/enfuseAdvanced.lua:975
|
||||
msgid "save to fusion preset"
|
||||
msgstr "salvar para predefinição de fusão"
|
||||
|
||||
#: ../contrib/enfuseAdvanced.lua:976
|
||||
msgid "save current fusion parameters to selected preset"
|
||||
msgstr "salva os parâmetros de fusão atuais para a predefinição selecionada"
|
||||
|
||||
#: ../contrib/enfuseAdvanced.lua:980
|
||||
msgid "create image variants from presets"
|
||||
msgstr "criar variantes da imagem a partir das predefinições"
|
||||
|
||||
#: ../contrib/enfuseAdvanced.lua:982
|
||||
msgid ""
|
||||
"create multiple image variants based on the three different presets of the "
|
||||
"specified type"
|
||||
msgstr ""
|
||||
"cria múltiplas variantes da imagem baseadas nas três diferentes predefinições"
|
||||
" do tipo "
|
||||
"especificado"
|
||||
|
||||
#: ../contrib/enfuseAdvanced.lua:999
|
||||
msgid "create variants type"
|
||||
msgstr "criar tipos de variantes"
|
||||
|
||||
#: ../contrib/enfuseAdvanced.lua:1000
|
||||
msgid "preset type to be used when creating image variants"
|
||||
msgstr "tipo de predefinição a ser usado ao criar variantes de imagens"
|
||||
|
||||
#: ../contrib/enfuseAdvanced.lua:1039
|
||||
msgid "update"
|
||||
msgstr "atualizar"
|
||||
|
||||
#: ../contrib/enfuseAdvanced.lua:1040
|
||||
msgid "update the binary paths with current values"
|
||||
msgstr "atualiza os caminhos dos binários com os valores atuais"
|
||||
|
||||
#: ../contrib/enfuseAdvanced.lua:1120
|
||||
msgid "show options"
|
||||
msgstr "mostrar opções"
|
||||
|
||||
#: ../contrib/enfuseAdvanced.lua:1121
|
||||
msgid "show options for specified aspect of output"
|
||||
msgstr "mostra as opções para o aspecto de saída especificado"
|
||||
|
||||
#: ../contrib/enfuseAdvanced.lua:1142
|
||||
msgid "DRI or DFF image"
|
||||
msgstr "imagem DRI ou DFF"
|
||||
58
locale/pt_BR/LC_MESSAGES/executable_manager.po
Normal file
58
locale/pt_BR/LC_MESSAGES/executable_manager.po
Normal file
@@ -0,0 +1,58 @@
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
#
|
||||
# Marcus Gama <marcus.gama@gmail.com>, 2021.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-09-28 11:50-0300\n"
|
||||
"PO-Revision-Date: 2021-09-28 19:39-0300\n"
|
||||
"Language: pt_BR\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Last-Translator: Marcus Gama <marcus.gama@gmail.com>\n"
|
||||
"Language-Team: Portuguese <darktable-dev@lists.darktable.org>\n"
|
||||
"X-Generator: Lokalize 21.08.1\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||
|
||||
#: executable_manager.lua:144
|
||||
msgid "No executable paths found, exiting..."
|
||||
msgstr "Caminho do executável não encontrado, saindo..."
|
||||
|
||||
#: executable_manager.lua:160
|
||||
msgid "select an executable"
|
||||
msgstr "selecione um executável"
|
||||
|
||||
#: executable_manager.lua:160
|
||||
msgid "search path for executable"
|
||||
msgstr "caminho de pesquisa por executável"
|
||||
|
||||
#: executable_manager.lua:169
|
||||
msgid "select "
|
||||
msgstr "selecionar "
|
||||
|
||||
#: executable_manager.lua:169
|
||||
msgid " executable"
|
||||
msgstr " executável"
|
||||
|
||||
#: executable_manager.lua:190
|
||||
msgid "select executable to modify"
|
||||
msgstr "selecione executável a modificar"
|
||||
|
||||
#: executable_manager.lua:205
|
||||
msgid "current"
|
||||
msgstr "atual"
|
||||
|
||||
#: executable_manager.lua:207
|
||||
msgid "select"
|
||||
msgstr "selecionar"
|
||||
|
||||
#: executable_manager.lua:209
|
||||
msgid "reset"
|
||||
msgstr "reiniciar"
|
||||
|
||||
#: executable_manager.lua:212
|
||||
msgid "Clear path for "
|
||||
msgstr "Limpar caminho para "
|
||||
62
locale/pt_BR/LC_MESSAGES/exportLUT.po
Normal file
62
locale/pt_BR/LC_MESSAGES/exportLUT.po
Normal file
@@ -0,0 +1,62 @@
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
#
|
||||
# Marcus Gama <marcus.gama@gmail.com>, 2021.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-09-28 19:37-0300\n"
|
||||
"PO-Revision-Date: 2021-09-30 19:25-0300\n"
|
||||
"Last-Translator: Marcus Gama <marcus.gama@gmail.com>\n"
|
||||
"Language-Team: Portuguese <darktable-dev@lists.darktable.org>\n"
|
||||
"Language: pt_BR\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||
"X-Generator: Lokalize 21.08.1\n"
|
||||
|
||||
#: ../contrib/exportLUT.lua:66
|
||||
msgid "Identity_file_chooser"
|
||||
msgstr "Selecionar_arquiv_identidade"
|
||||
|
||||
#: ../contrib/exportLUT.lua:72
|
||||
msgid "Export_location_chooser"
|
||||
msgstr "Selecionar_localização_exportação"
|
||||
|
||||
#: ../contrib/exportLUT.lua:78
|
||||
msgid "choose the identity haldclut file"
|
||||
msgstr "selecione o arquivo halclut de identidade"
|
||||
|
||||
#: ../contrib/exportLUT.lua:82
|
||||
msgid "choose the output location"
|
||||
msgstr "selecione a localização de saída"
|
||||
|
||||
#: ../contrib/exportLUT.lua:86
|
||||
msgid "WARNING: files may be silently overwritten"
|
||||
msgstr "AVISO: os arquivos podem ser sobrescritos sem confirmação"
|
||||
|
||||
#: ../contrib/exportLUT.lua:108
|
||||
msgid "Invalid identity lut file"
|
||||
msgstr "Arquivo lut de identidade inválido"
|
||||
|
||||
#: ../contrib/exportLUT.lua:110
|
||||
msgid "Exporting styles as haldCLUTs"
|
||||
msgstr "Exportar estilos como haldCLUTs"
|
||||
|
||||
#: ../contrib/exportLUT.lua:129
|
||||
msgid "Exported: "
|
||||
msgstr "Exportado: "
|
||||
|
||||
#: ../contrib/exportLUT.lua:131
|
||||
msgid "Done exporting haldCLUTs"
|
||||
msgstr "Exportação de haldCLUTs feita"
|
||||
|
||||
#: ../contrib/exportLUT.lua:141
|
||||
msgid "export haldclut"
|
||||
msgstr "exportar haldclut"
|
||||
|
||||
#: ../contrib/exportLUT.lua:166
|
||||
msgid "export"
|
||||
msgstr "exportar"
|
||||
129
locale/pt_BR/LC_MESSAGES/ext_editor.po
Normal file
129
locale/pt_BR/LC_MESSAGES/ext_editor.po
Normal file
@@ -0,0 +1,129 @@
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
#
|
||||
# Marcus Gama <marcus.gama@gmail.com>, 2021.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-09-28 19:37-0300\n"
|
||||
"PO-Revision-Date: 2021-10-01 19:07-0300\n"
|
||||
"Last-Translator: Marcus Gama <marcus.gama@gmail.com>\n"
|
||||
"Language-Team: Portuguese <darktable-dev@lists.darktable.org>\n"
|
||||
"Language: pt_BR\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||
"X-Generator: Lokalize 21.08.1\n"
|
||||
|
||||
#: ../contrib/ext_editor.lua:158
|
||||
msgid " editors configured"
|
||||
msgstr " editores configurados"
|
||||
|
||||
#: ../contrib/ext_editor.lua:167
|
||||
msgid "not a valid choice"
|
||||
msgstr "não é uma escolha válida"
|
||||
|
||||
#: ../contrib/ext_editor.lua:173
|
||||
msgid "please select one image"
|
||||
msgstr "por favor, selecione uma imagem"
|
||||
|
||||
#: ../contrib/ext_editor.lua:197
|
||||
msgid "file type not allowed"
|
||||
msgstr "tipo de arquivo não permitido"
|
||||
|
||||
#: ../contrib/ext_editor.lua:225
|
||||
msgid "error copying file "
|
||||
msgstr "erro ao copiar arquivo "
|
||||
|
||||
#: ../contrib/ext_editor.lua:232
|
||||
msgid "launching "
|
||||
msgstr "iniciando "
|
||||
|
||||
#: ../contrib/ext_editor.lua:235
|
||||
msgid "error launching "
|
||||
msgstr "erro ao lançar "
|
||||
|
||||
#: ../contrib/ext_editor.lua:328
|
||||
msgid "error moving file "
|
||||
msgstr "erro ao mover arquivo "
|
||||
|
||||
#: ../contrib/ext_editor.lua:337
|
||||
msgid "finished exporting"
|
||||
msgstr "exportação terminada"
|
||||
|
||||
#: ../contrib/ext_editor.lua:354
|
||||
msgid "external editors"
|
||||
msgstr "editores externos"
|
||||
|
||||
#: ../contrib/ext_editor.lua:380 ../contrib/ext_editor.lua:493
|
||||
msgid "edit with program "
|
||||
msgstr "editar com programa "
|
||||
|
||||
#: ../contrib/ext_editor.lua:382 ../contrib/ext_editor.lua:472
|
||||
msgid "collection"
|
||||
msgstr "coleção"
|
||||
|
||||
#: ../contrib/ext_editor.lua:393
|
||||
msgid "choose program"
|
||||
msgstr "selecionar programa"
|
||||
|
||||
#: ../contrib/ext_editor.lua:394
|
||||
msgid "select the external editor from the list"
|
||||
msgstr "selecione o editor externo a partir da lista"
|
||||
|
||||
#: ../contrib/ext_editor.lua:404
|
||||
msgid "edit"
|
||||
msgstr "editar"
|
||||
|
||||
#: ../contrib/ext_editor.lua:405
|
||||
msgid "open the selected image in external editor"
|
||||
msgstr "abre a imagem selecionada no editor externo"
|
||||
|
||||
#: ../contrib/ext_editor.lua:415
|
||||
msgid "edit a copy"
|
||||
msgstr "editar uma cópia"
|
||||
|
||||
#: ../contrib/ext_editor.lua:416
|
||||
msgid "create a copy of the selected image and open it in external editor"
|
||||
msgstr "cria uma cópia da imagem selecionada e abre-a no editor externo"
|
||||
|
||||
#: ../contrib/ext_editor.lua:425
|
||||
msgid "update list"
|
||||
msgstr "atualizar lista"
|
||||
|
||||
#: ../contrib/ext_editor.lua:426
|
||||
msgid "update list of programs if lua preferences are changed"
|
||||
msgstr "atualiza lista de programas se as preferências do lua forem alteradas"
|
||||
|
||||
#: ../contrib/ext_editor.lua:478
|
||||
msgid "executable for external editor "
|
||||
msgstr "executável para o editor externo "
|
||||
|
||||
#: ../contrib/ext_editor.lua:479
|
||||
msgid "select executable for external editor"
|
||||
msgstr "seleciona o executável para o editor externo"
|
||||
|
||||
#: ../contrib/ext_editor.lua:479
|
||||
msgid "(None)"
|
||||
msgstr "(Nenhum)"
|
||||
|
||||
#: ../contrib/ext_editor.lua:482
|
||||
msgid "name of external editor "
|
||||
msgstr "nome do editor externo "
|
||||
|
||||
#: ../contrib/ext_editor.lua:483
|
||||
msgid "friendly name of external editor"
|
||||
msgstr "nome amigável do editor externo"
|
||||
|
||||
#: ../contrib/ext_editor.lua:486
|
||||
msgid "show external editors in darkroom"
|
||||
msgstr "mostrar editores externos na sala escura"
|
||||
|
||||
#: ../contrib/ext_editor.lua:487
|
||||
msgid ""
|
||||
"check to show external editors module also in darkroom (requires restart)"
|
||||
msgstr ""
|
||||
"ative para mostrar o módulo de editores externos também na sala escura"
|
||||
" (precisa reiniciar)"
|
||||
135
locale/pt_BR/LC_MESSAGES/face_recognition.po
Normal file
135
locale/pt_BR/LC_MESSAGES/face_recognition.po
Normal file
@@ -0,0 +1,135 @@
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
#
|
||||
# Marcus Gama <marcus.gama@gmail.com>, 2021.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-09-28 19:37-0300\n"
|
||||
"PO-Revision-Date: 2021-10-01 19:12-0300\n"
|
||||
"Last-Translator: Marcus Gama <marcus.gama@gmail.com>\n"
|
||||
"Language-Team: Portuguese <darktable-dev@lists.darktable.org>\n"
|
||||
"Language: pt_BR\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||
"X-Generator: Lokalize 21.08.1\n"
|
||||
|
||||
#: ../contrib/face_recognition.lua:131
|
||||
msgid "export images"
|
||||
msgstr "exportar imagens"
|
||||
|
||||
#: ../contrib/face_recognition.lua:137
|
||||
#, lua-format
|
||||
msgid "Exporting image %i of %i images"
|
||||
msgstr "Exportando imagem %i de %i imagens"
|
||||
|
||||
#: ../contrib/face_recognition.lua:207
|
||||
msgid "Face recognition not found"
|
||||
msgstr "Reconhecimento de rosto não encontrado"
|
||||
|
||||
#: ../contrib/face_recognition.lua:259
|
||||
msgid "Starting face recognition..."
|
||||
msgstr "Iniciando reconhecimento de rosto..."
|
||||
|
||||
#: ../contrib/face_recognition.lua:267
|
||||
msgid "Face recognition failed"
|
||||
msgstr "Reconhecimento de rosto falhou"
|
||||
|
||||
#: ../contrib/face_recognition.lua:269
|
||||
msgid "Face recognition finished"
|
||||
msgstr "Reconhecimento de rosto terminado"
|
||||
|
||||
#: ../contrib/face_recognition.lua:274
|
||||
msgid "processing results..."
|
||||
msgstr "processando resultados..."
|
||||
|
||||
#: ../contrib/face_recognition.lua:338
|
||||
msgid "face recognition complete"
|
||||
msgstr "reconhecimento de rosto completo"
|
||||
|
||||
#: ../contrib/face_recognition.lua:340
|
||||
msgid "image export failed"
|
||||
msgstr "exportação da imagem falhou"
|
||||
|
||||
#: ../contrib/face_recognition.lua:344
|
||||
msgid "no images selected"
|
||||
msgstr "nenhuma imagem selecionada"
|
||||
|
||||
#: ../contrib/face_recognition.lua:353
|
||||
msgid "face recognition"
|
||||
msgstr "reconhecimento de rosto"
|
||||
|
||||
#: ../contrib/face_recognition.lua:377
|
||||
msgid "tag to be used for unknown person"
|
||||
msgstr "etiqueta a ser usada para pessoa desconhecida"
|
||||
|
||||
#: ../contrib/face_recognition.lua:383
|
||||
msgid "tag to be used when no persons are found"
|
||||
msgstr "etiqueta a ser usada quando nenhuma pessoa for encontrada"
|
||||
|
||||
#: ../contrib/face_recognition.lua:389 ../contrib/face_recognition.lua:467
|
||||
msgid "tags of images to ignore"
|
||||
msgstr "etiquetas de imagens para ignorar"
|
||||
|
||||
#: ../contrib/face_recognition.lua:395 ../contrib/face_recognition.lua:469
|
||||
msgid "tag category"
|
||||
msgstr "categoria da etiqueta"
|
||||
|
||||
#: ../contrib/face_recognition.lua:400
|
||||
msgid "tolerance"
|
||||
msgstr "tolerância"
|
||||
|
||||
#: ../contrib/face_recognition.lua:412
|
||||
msgid "processor cores"
|
||||
msgstr "núcleos de processador"
|
||||
|
||||
#: ../contrib/face_recognition.lua:413
|
||||
msgid "number of processor cores to use, 0 for all"
|
||||
msgstr "número de núcleos de processador a usar, 0 para todos"
|
||||
|
||||
#: ../contrib/face_recognition.lua:424
|
||||
msgid "known image directory"
|
||||
msgstr "pasta de imagem conhecida"
|
||||
|
||||
#: ../contrib/face_recognition.lua:425 ../contrib/face_recognition.lua:471
|
||||
msgid "face data directory"
|
||||
msgstr "pasta de dados de rosto"
|
||||
|
||||
#: ../contrib/face_recognition.lua:434
|
||||
msgid "export image format"
|
||||
msgstr "formato de exportação da imagem"
|
||||
|
||||
#: ../contrib/face_recognition.lua:435
|
||||
msgid "format for exported images"
|
||||
msgstr "formato para as imagens exportadas"
|
||||
|
||||
#: ../contrib/face_recognition.lua:445
|
||||
msgid "maximum exported image width"
|
||||
msgstr "largura máxima das imagens exportadas"
|
||||
|
||||
#: ../contrib/face_recognition.lua:451
|
||||
msgid "maximum exported image height"
|
||||
msgstr "altura máxima das imagens exportada"
|
||||
|
||||
#: ../contrib/face_recognition.lua:463
|
||||
msgid "unknown person tag"
|
||||
msgstr "etiqueta de pessoa desconhecida"
|
||||
|
||||
#: ../contrib/face_recognition.lua:465
|
||||
msgid "no persons found tag"
|
||||
msgstr "etiqueta de nenhuma pessoa encontrada"
|
||||
|
||||
#: ../contrib/face_recognition.lua:478
|
||||
msgid "processing options"
|
||||
msgstr "opções de processamento"
|
||||
|
||||
#: ../contrib/face_recognition.lua:484
|
||||
msgid "width "
|
||||
msgstr "largura "
|
||||
|
||||
#: ../contrib/face_recognition.lua:489
|
||||
msgid "height "
|
||||
msgstr "altura "
|
||||
30
locale/pt_BR/LC_MESSAGES/fujifilm_ratings.po
Normal file
30
locale/pt_BR/LC_MESSAGES/fujifilm_ratings.po
Normal file
@@ -0,0 +1,30 @@
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
#
|
||||
# Marcus Gama <marcus.gama@gmail.com>, 2021.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-09-28 19:37-0300\n"
|
||||
"PO-Revision-Date: 2021-09-30 19:26-0300\n"
|
||||
"Last-Translator: Marcus Gama <marcus.gama@gmail.com>\n"
|
||||
"Language-Team: Portuguese <darktable-dev@lists.darktable.org>\n"
|
||||
"Language: pt_BR\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||
"X-Generator: Lokalize 21.08.1\n"
|
||||
|
||||
#: ../contrib/fujifilm_ratings.lua:49
|
||||
msgid "exiftool not found"
|
||||
msgstr "exiftool não encontrado"
|
||||
|
||||
#: ../contrib/fujifilm_ratings.lua:62
|
||||
msgid "Using JPEG Rating: "
|
||||
msgstr "Usar classificação JPEG: "
|
||||
|
||||
#: ../contrib/fujifilm_ratings.lua:73
|
||||
msgid "Using RAF Rating: "
|
||||
msgstr "Usar classificação RAF: "
|
||||
77
locale/pt_BR/LC_MESSAGES/geoJSON_export.po
Normal file
77
locale/pt_BR/LC_MESSAGES/geoJSON_export.po
Normal file
@@ -0,0 +1,77 @@
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
#
|
||||
# Marcus Gama <marcus.gama@gmail.com>, 2021.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-09-28 19:37-0300\n"
|
||||
"PO-Revision-Date: 2021-10-01 19:16-0300\n"
|
||||
"Last-Translator: Marcus Gama <marcus.gama@gmail.com>\n"
|
||||
"Language-Team: Portuguese <darktable-dev@lists.darktable.org>\n"
|
||||
"Language: pt_BR\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||
"X-Generator: Lokalize 21.08.1\n"
|
||||
|
||||
#: ../contrib/geoJSON_export.lua:82
|
||||
#, lua-format
|
||||
msgid "Export Image %i/%i"
|
||||
msgstr "Exportar Imagem %i/%i"
|
||||
|
||||
#: ../contrib/geoJSON_export.lua:87
|
||||
msgid "mkdir not found"
|
||||
msgstr "mkdir não encontrado"
|
||||
|
||||
#: ../contrib/geoJSON_export.lua:91
|
||||
msgid "convert not found"
|
||||
msgstr "convert não encontrado"
|
||||
|
||||
#: ../contrib/geoJSON_export.lua:95
|
||||
msgid "xdg-open not found"
|
||||
msgstr "xdg-open não encontrado"
|
||||
|
||||
#: ../contrib/geoJSON_export.lua:99
|
||||
msgid "xdg-user-dir not found"
|
||||
msgstr "xdg-user-dir não encontrado"
|
||||
|
||||
#: ../contrib/geoJSON_export.lua:310
|
||||
msgid "geoJSON export: Create an additional HTML file"
|
||||
msgstr "exportar geoJSON: Criar um arquivo HTML adicional"
|
||||
|
||||
#: ../contrib/geoJSON_export.lua:311
|
||||
msgid "Creates a HTML file, that loads the geoJASON file. (Needs a MapBox key"
|
||||
msgstr ""
|
||||
"Cria um arquivo HTML que carrega o arquivo geoJSON. (Precisa de uma chave"
|
||||
" MapBox)"
|
||||
|
||||
#: ../contrib/geoJSON_export.lua:316
|
||||
msgid "geoJSON export: MapBox Key"
|
||||
msgstr "exportar geoJSON : chave MapBox"
|
||||
|
||||
#: ../contrib/geoJSON_export.lua:317
|
||||
msgid "https://www.mapbox.com/studio/account/tokens"
|
||||
msgstr "https://www.mapbox.com/studio/account/tokens"
|
||||
|
||||
#: ../contrib/geoJSON_export.lua:322
|
||||
msgid "geoJSON export: Open geoJSON file after export"
|
||||
msgstr "exportar geoJSON: Abrir o arquivo geoJSON após exportar"
|
||||
|
||||
#: ../contrib/geoJSON_export.lua:323
|
||||
msgid ""
|
||||
"Opens the geoJSON file after the export with the standard program for "
|
||||
"geoJSON files"
|
||||
msgstr ""
|
||||
"Abre o arquivo geoJSON após a exportação com o programa padrão para arquivos"
|
||||
" geoJSON"
|
||||
|
||||
#: ../contrib/geoJSON_export.lua:335
|
||||
msgid "geoJSON export: Export directory"
|
||||
msgstr "exportar geoJSON: Pasta de exportação"
|
||||
|
||||
#: ../contrib/geoJSON_export.lua:336
|
||||
msgid "A directory that will be used to export the geoJSON files"
|
||||
msgstr "Uma pasta que será usada para exportar os arquivos geoJSON"
|
||||
166
locale/pt_BR/LC_MESSAGES/geoToolbox.po
Normal file
166
locale/pt_BR/LC_MESSAGES/geoToolbox.po
Normal file
@@ -0,0 +1,166 @@
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
#
|
||||
# Marcus Gama <marcus.gama@gmail.com>, 2021.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-09-28 19:37-0300\n"
|
||||
"PO-Revision-Date: 2021-10-01 19:23-0300\n"
|
||||
"Last-Translator: Marcus Gama <marcus.gama@gmail.com>\n"
|
||||
"Language-Team: Portuguese <darktable-dev@lists.darktable.org>\n"
|
||||
"Language: pt_BR\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||
"X-Generator: Lokalize 21.08.1\n"
|
||||
|
||||
#: ../contrib/geoToolbox.lua:58
|
||||
msgid "Distance:"
|
||||
msgstr "Distância:"
|
||||
|
||||
#: ../contrib/geoToolbox.lua:62
|
||||
msgid "latitude:"
|
||||
msgstr "latitude:"
|
||||
|
||||
#: ../contrib/geoToolbox.lua:67
|
||||
msgid "longitude:"
|
||||
msgstr "longitude:"
|
||||
|
||||
#: ../contrib/geoToolbox.lua:72
|
||||
msgid "elevation:"
|
||||
msgstr "elevação:"
|
||||
|
||||
#: ../contrib/geoToolbox.lua:79 ../contrib/geoToolbox.lua:99
|
||||
msgid "GPS selection"
|
||||
msgstr "seleção do GPS"
|
||||
|
||||
#: ../contrib/geoToolbox.lua:302
|
||||
msgid "latitude: "
|
||||
msgstr "latitude: "
|
||||
|
||||
#: ../contrib/geoToolbox.lua:303
|
||||
msgid "longitude: "
|
||||
msgstr "longitude: "
|
||||
|
||||
#: ../contrib/geoToolbox.lua:304
|
||||
msgid "elevation: "
|
||||
msgstr "elevação: "
|
||||
|
||||
#: ../contrib/geoToolbox.lua:329
|
||||
msgid "gnome-maps not found"
|
||||
msgstr "gnome-maps não encontrado"
|
||||
|
||||
#: ../contrib/geoToolbox.lua:367
|
||||
msgid "curl not found"
|
||||
msgstr "curl não encontrado"
|
||||
|
||||
#: ../contrib/geoToolbox.lua:372
|
||||
msgid "jq not found"
|
||||
msgstr "jq não encontrado"
|
||||
|
||||
#: ../contrib/geoToolbox.lua:490
|
||||
msgid "m"
|
||||
msgstr "m"
|
||||
|
||||
#: ../contrib/geoToolbox.lua:492
|
||||
msgid "km"
|
||||
msgstr "km"
|
||||
|
||||
#: ../contrib/geoToolbox.lua:495
|
||||
#, lua-format
|
||||
msgid "Distance: %.2f %s"
|
||||
msgstr "Distância: %.2f %s"
|
||||
|
||||
#: ../contrib/geoToolbox.lua:508
|
||||
msgid "export altitude CSV"
|
||||
msgstr "exportar altitude para CSV"
|
||||
|
||||
#: ../contrib/geoToolbox.lua:518
|
||||
msgid "Name of the exported file"
|
||||
msgstr "Nome do arquivo exportado"
|
||||
|
||||
#: ../contrib/geoToolbox.lua:523
|
||||
msgid "Start export"
|
||||
msgstr "Iniciar exportação"
|
||||
|
||||
#: ../contrib/geoToolbox.lua:584
|
||||
msgid "File created in "
|
||||
msgstr "Arquivo criado em "
|
||||
|
||||
#: ../contrib/geoToolbox.lua:614 ../contrib/geoToolbox.lua:746
|
||||
msgid "Calculate the distance from latitude and longitude in km"
|
||||
msgstr "Calcula a distância da latitude e longitude em km"
|
||||
|
||||
#: ../contrib/geoToolbox.lua:619 ../contrib/geoToolbox.lua:644
|
||||
#: ../contrib/geoToolbox.lua:751
|
||||
msgid "Select all images with GPS information"
|
||||
msgstr "Selecionar todas as imagens com informação de GPS"
|
||||
|
||||
#: ../contrib/geoToolbox.lua:621 ../contrib/geoToolbox.lua:650
|
||||
#: ../contrib/geoToolbox.lua:753
|
||||
msgid "Select all images without GPS information"
|
||||
msgstr "Selecionar todas as imagens sem informação de GPS"
|
||||
|
||||
#: ../contrib/geoToolbox.lua:643
|
||||
msgid "select geo images"
|
||||
msgstr "selecionar imagens geoetiquetadas"
|
||||
|
||||
#: ../contrib/geoToolbox.lua:649
|
||||
msgid "select non-geo images"
|
||||
msgstr "selecionar imagens sem geoetiquetas"
|
||||
|
||||
#: ../contrib/geoToolbox.lua:656
|
||||
msgid "copy GPS data"
|
||||
msgstr "copiar dados do GPS"
|
||||
|
||||
#: ../contrib/geoToolbox.lua:657
|
||||
msgid "Copy GPS data"
|
||||
msgstr "Copiar dados do GPS"
|
||||
|
||||
#: ../contrib/geoToolbox.lua:665
|
||||
msgid "paste GPS data"
|
||||
msgstr "colar dados do GPS"
|
||||
|
||||
#: ../contrib/geoToolbox.lua:666
|
||||
msgid "Paste GPS data"
|
||||
msgstr "Colar dados do GPS"
|
||||
|
||||
#: ../contrib/geoToolbox.lua:695
|
||||
msgid "open in Gnome Maps"
|
||||
msgstr "abrir no Gnome Maps"
|
||||
|
||||
#: ../contrib/geoToolbox.lua:696
|
||||
msgid "Open location in Gnome Maps"
|
||||
msgstr "Abrir localização no Gnome Maps"
|
||||
|
||||
#: ../contrib/geoToolbox.lua:702
|
||||
msgid "reverse geocode"
|
||||
msgstr "geocódigo reverso"
|
||||
|
||||
#: ../contrib/geoToolbox.lua:703
|
||||
msgid "This just shows the name of the location, but doesn't add it as tag"
|
||||
msgstr ""
|
||||
"Isto apenas mostra o nome da localização, mas não adiciona-a como uma etiqueta"
|
||||
|
||||
#: ../contrib/geoToolbox.lua:707
|
||||
msgid "altitude CSV export"
|
||||
msgstr "exportar altitude em CSV"
|
||||
|
||||
#: ../contrib/geoToolbox.lua:712
|
||||
msgid "export altitude CSV file"
|
||||
msgstr "exporta o arquivo CSV de altitude"
|
||||
|
||||
#: ../contrib/geoToolbox.lua:713
|
||||
msgid "Create an altitude profile using the GPS data in the metadata"
|
||||
msgstr "Cria um perfil de altitude usando os dados GPS nos metadados"
|
||||
|
||||
#: ../contrib/geoToolbox.lua:740
|
||||
msgid "geoToolbox export: MapBox Key"
|
||||
msgstr "exportar geoToolbox: chave MapBox"
|
||||
|
||||
#: ../contrib/geoToolbox.lua:741
|
||||
msgid "https://www.mapbox.com/studio/account/tokens"
|
||||
msgstr "https://www.mapbox.com/studio/account/tokens"
|
||||
43
locale/pt_BR/LC_MESSAGES/gimp.po
Normal file
43
locale/pt_BR/LC_MESSAGES/gimp.po
Normal file
@@ -0,0 +1,43 @@
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
#
|
||||
# Marcus Gama <marcus.gama@gmail.com>, 2021.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-09-28 19:37-0300\n"
|
||||
"PO-Revision-Date: 2021-10-01 19:18-0300\n"
|
||||
"Last-Translator: Marcus Gama <marcus.gama@gmail.com>\n"
|
||||
"Language-Team: Portuguese <darktable-dev@lists.darktable.org>\n"
|
||||
"Language: pt_BR\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||
"X-Generator: Lokalize 21.08.1\n"
|
||||
|
||||
#: ../contrib/gimp.lua:111
|
||||
#, lua-format
|
||||
msgid "Export Image %i/%i"
|
||||
msgstr "Exportar Imagem %i/%i"
|
||||
|
||||
#: ../contrib/gimp.lua:121
|
||||
msgid "GIMP not found"
|
||||
msgstr "GIMP não encontrado"
|
||||
|
||||
#: ../contrib/gimp.lua:144
|
||||
msgid "Launching GIMP..."
|
||||
msgstr "Iniciando GIMP..."
|
||||
|
||||
#: ../contrib/gimp.lua:207
|
||||
msgid "run detached"
|
||||
msgstr "executar desassociado"
|
||||
|
||||
#: ../contrib/gimp.lua:208
|
||||
msgid "don't import resulting image back into darktable"
|
||||
msgstr "não importar a imagem resultante de volta para o darktable"
|
||||
|
||||
#: ../contrib/gimp.lua:215
|
||||
msgid "Edit with GIMP"
|
||||
msgstr "Editar com o GIMP"
|
||||
54
locale/pt_BR/LC_MESSAGES/gpx_export.po
Normal file
54
locale/pt_BR/LC_MESSAGES/gpx_export.po
Normal file
@@ -0,0 +1,54 @@
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
#
|
||||
# Marcus Gama <marcus.gama@gmail.com>, 2021.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-09-28 19:37-0300\n"
|
||||
"PO-Revision-Date: 2021-09-28 19:48-0300\n"
|
||||
"Last-Translator: Marcus Gama <marcus.gama@gmail.com>\n"
|
||||
"Language-Team: Portuguese <darktable-dev@lists.darktable.org>\n"
|
||||
"Language: pt_BR\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||
"X-Generator: Lokalize 21.08.1\n"
|
||||
|
||||
#: ../contrib/gpx_export.lua:59
|
||||
msgid "gpx file path"
|
||||
msgstr "caminho do arquivo gpx"
|
||||
|
||||
#: ../contrib/gpx_export.lua:72
|
||||
msgid "exporting gpx file..."
|
||||
msgstr "exportar arquivo gpx..."
|
||||
|
||||
#: ../contrib/gpx_export.lua:74
|
||||
msgid "gpx export"
|
||||
msgstr "exportar gpx"
|
||||
|
||||
#: ../contrib/gpx_export.lua:93 ../contrib/gpx_export.lua:94
|
||||
msgid " does not have date information and won't be processed"
|
||||
msgstr " não possui informações de data e não será processado"
|
||||
|
||||
#: ../contrib/gpx_export.lua:134
|
||||
msgid "invalid path: "
|
||||
msgstr "caminho inválido: "
|
||||
|
||||
#: ../contrib/gpx_export.lua:138
|
||||
msgid "gpx file created: "
|
||||
msgstr "arquivo gpx criado: "
|
||||
|
||||
#: ../contrib/gpx_export.lua:171
|
||||
msgid "export"
|
||||
msgstr "exportar"
|
||||
|
||||
#: ../contrib/gpx_export.lua:172
|
||||
msgid "export gpx file"
|
||||
msgstr "exportar arquivo gpx"
|
||||
|
||||
#: ../contrib/gpx_export.lua:180
|
||||
msgid "file:"
|
||||
msgstr "arquivo:"
|
||||
22
locale/pt_BR/LC_MESSAGES/harmonic_armature_guide.po
Normal file
22
locale/pt_BR/LC_MESSAGES/harmonic_armature_guide.po
Normal file
@@ -0,0 +1,22 @@
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
#
|
||||
# Marcus Gama <marcus.gama@gmail.com>, 2021.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-09-28 19:37-0300\n"
|
||||
"PO-Revision-Date: 2021-09-30 19:26-0300\n"
|
||||
"Last-Translator: Marcus Gama <marcus.gama@gmail.com>\n"
|
||||
"Language-Team: Portuguese <darktable-dev@lists.darktable.org>\n"
|
||||
"Language: pt_BR\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||
"X-Generator: Lokalize 21.08.1\n"
|
||||
|
||||
#: ../contrib/harmonic_armature_guide.lua:76
|
||||
msgid "harmonic armature"
|
||||
msgstr "armadura harmônica"
|
||||
67
locale/pt_BR/LC_MESSAGES/hugin.po
Normal file
67
locale/pt_BR/LC_MESSAGES/hugin.po
Normal file
@@ -0,0 +1,67 @@
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
#
|
||||
# Marcus Gama <marcus.gama@gmail.com>, 2021.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-09-28 19:37-0300\n"
|
||||
"PO-Revision-Date: 2021-10-01 19:26-0300\n"
|
||||
"Last-Translator: Marcus Gama <marcus.gama@gmail.com>\n"
|
||||
"Language-Team: Portuguese <darktable-dev@lists.darktable.org>\n"
|
||||
"Language: pt_BR\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||
"X-Generator: Lokalize 21.08.1\n"
|
||||
|
||||
#: ../contrib/hugin.lua:109
|
||||
msgid "hugin is not found, did you set the path?"
|
||||
msgstr "hugin não encontrado, você configurou o caminho?"
|
||||
|
||||
#: ../contrib/hugin.lua:165
|
||||
msgid "will try to stitch now"
|
||||
msgstr "tentará pregar agora"
|
||||
|
||||
#: ../contrib/hugin.lua:170
|
||||
msgid "creating pto file"
|
||||
msgstr "criar arquivo pto"
|
||||
|
||||
#: ../contrib/hugin.lua:174
|
||||
msgid "running assistant"
|
||||
msgstr "rodar assistente"
|
||||
|
||||
#: ../contrib/hugin.lua:182
|
||||
msgid "launching hugin"
|
||||
msgstr "iniciar o hugin"
|
||||
|
||||
#: ../contrib/hugin.lua:184
|
||||
msgid "unable to find command line tools, launching hugin"
|
||||
msgstr ""
|
||||
"não foi possível encontrar as ferramentas de linha de comando, iniciar o hugin"
|
||||
|
||||
#: ../contrib/hugin.lua:192
|
||||
msgid "hugin isn't available."
|
||||
msgstr "hugin não está disponível."
|
||||
|
||||
#: ../contrib/hugin.lua:197
|
||||
msgid "hugin failed ..."
|
||||
msgstr "hugin falhou..."
|
||||
|
||||
#: ../contrib/hugin.lua:203
|
||||
msgid "importing file "
|
||||
msgstr "importar arquivo "
|
||||
|
||||
#: ../contrib/hugin.lua:229
|
||||
msgid " launch hugin gui"
|
||||
msgstr " iniciar interface gráfica do hugin"
|
||||
|
||||
#: ../contrib/hugin.lua:231
|
||||
msgid "launch hugin in gui mode"
|
||||
msgstr "inicia o hugin no modo de interface gráfica"
|
||||
|
||||
#: ../contrib/hugin.lua:237
|
||||
msgid "hugin panorama"
|
||||
msgstr "hugin panorama"
|
||||
273
locale/pt_BR/LC_MESSAGES/image_stack.po
Normal file
273
locale/pt_BR/LC_MESSAGES/image_stack.po
Normal file
@@ -0,0 +1,273 @@
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
#
|
||||
# Marcus Gama <marcus.gama@gmail.com>, 2021.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-09-28 19:37-0300\n"
|
||||
"PO-Revision-Date: 2021-10-01 23:35-0300\n"
|
||||
"Last-Translator: Marcus Gama <marcus.gama@gmail.com>\n"
|
||||
"Language-Team: Portuguese <darktable-dev@lists.darktable.org>\n"
|
||||
"Language: pt_BR\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||
"X-Generator: Lokalize 21.08.1\n"
|
||||
|
||||
#: ../contrib/image_stack.lua:96
|
||||
msgid "image align options"
|
||||
msgstr "opções de alinhamento da imagem"
|
||||
|
||||
#: ../contrib/image_stack.lua:100
|
||||
msgid "image stack options"
|
||||
msgstr "opções de empilhamento da imagem"
|
||||
|
||||
#: ../contrib/image_stack.lua:104
|
||||
msgid "executable locations"
|
||||
msgstr "localizações dos executáveis"
|
||||
|
||||
#: ../contrib/image_stack.lua:129
|
||||
msgid "perform image alignment"
|
||||
msgstr "realizar o alinhamento da imagem"
|
||||
|
||||
#: ../contrib/image_stack.lua:131
|
||||
msgid "align the image stack before processing"
|
||||
msgstr "alinha a pilha de imagem antes de processar"
|
||||
|
||||
#: ../contrib/image_stack.lua:135
|
||||
msgid "optimize radial distortion for all images"
|
||||
msgstr "otimizar a distorção radial para todas as imagens"
|
||||
|
||||
#: ../contrib/image_stack.lua:137
|
||||
msgid ""
|
||||
"optimize radial distortion for all images, \n"
|
||||
"except for first"
|
||||
msgstr ""
|
||||
"otimiza a distorção radial para todas as imagens,\n"
|
||||
"exceto para a primeira"
|
||||
|
||||
#: ../contrib/image_stack.lua:141
|
||||
msgid "optimize field of view for all images"
|
||||
msgstr "otimizar campo de visão para todas as imagens"
|
||||
|
||||
#: ../contrib/image_stack.lua:143
|
||||
msgid ""
|
||||
"optimize field of view for all images, except for first. \n"
|
||||
"Useful for aligning focus stacks (DFF) with slightly \n"
|
||||
"different magnification."
|
||||
msgstr ""
|
||||
"otimiza o campo de visão para todas as imagens, exceto para a primeira.\n"
|
||||
"Útil para alinhar o empilhamento de foco (DFF) com uma ampliação \n"
|
||||
"levemente diferente."
|
||||
|
||||
#: ../contrib/image_stack.lua:147
|
||||
msgid "optimize image center shift for all images"
|
||||
msgstr "otimizar o deslocamento do centro da imagem para todas as imagens"
|
||||
|
||||
#: ../contrib/image_stack.lua:149
|
||||
msgid ""
|
||||
"optimize image center shift for all images, \n"
|
||||
"except for first."
|
||||
msgstr ""
|
||||
"otimiza o deslocamento do centro da imagem para todas as imagens, \n"
|
||||
"exceto para a primeira."
|
||||
|
||||
#: ../contrib/image_stack.lua:153
|
||||
msgid "auto crop the image"
|
||||
msgstr "cortar automaticamente a imagem"
|
||||
|
||||
#: ../contrib/image_stack.lua:155
|
||||
msgid "auto crop the image to the area covered by all images."
|
||||
msgstr ""
|
||||
"corta automaticamente a imagem para a área coberta por todas as imagens."
|
||||
|
||||
#: ../contrib/image_stack.lua:159
|
||||
msgid "load distortion from lens database"
|
||||
msgstr "carregar a distorção a partir da base de dados de lentes"
|
||||
|
||||
#: ../contrib/image_stack.lua:161
|
||||
msgid "try to load distortion information from lens database"
|
||||
msgstr "tenta carregar as informações de distorção da base de dados de lentes"
|
||||
|
||||
#: ../contrib/image_stack.lua:165
|
||||
msgid "image grid size"
|
||||
msgstr "tamanho da grade da imagem"
|
||||
|
||||
#: ../contrib/image_stack.lua:166
|
||||
msgid ""
|
||||
"break image into a rectangular grid \n"
|
||||
"and attempt to find num control points in each section.\n"
|
||||
"default: (5x5)"
|
||||
msgstr ""
|
||||
"quebra a imagem em uma grade retangular \n"
|
||||
"e tenta encontrar o número de pontos de controle\n"
|
||||
"em cada seção.\n"
|
||||
"padrão: (5x5)"
|
||||
|
||||
#: ../contrib/image_stack.lua:175
|
||||
msgid "control points/grid"
|
||||
msgstr "grade/pontos de controle"
|
||||
|
||||
#: ../contrib/image_stack.lua:176
|
||||
msgid ""
|
||||
"number of control points (per grid, see option -g) \n"
|
||||
"to create between adjacent images \n"
|
||||
"default: (8)."
|
||||
msgstr ""
|
||||
"número de pontos de controle (por grade, veja a opção -g) \n"
|
||||
"a criar entre imagens adjacentes\n"
|
||||
"padrão: (8)"
|
||||
|
||||
#: ../contrib/image_stack.lua:185
|
||||
msgid "remove control points with error"
|
||||
msgstr "remover pontos de controle com erro"
|
||||
|
||||
#: ../contrib/image_stack.lua:186
|
||||
msgid ""
|
||||
"remove all control points with an error higher \n"
|
||||
"than num pixels \n"
|
||||
"default: (3)"
|
||||
msgstr ""
|
||||
"remove todos os pontos de controle com um erro maior \n"
|
||||
"que um número de pixels \n"
|
||||
"padrão: (3)"
|
||||
|
||||
#: ../contrib/image_stack.lua:195
|
||||
msgid "correlation threshold for control points"
|
||||
msgstr "limiar de correlação para pontos de controle"
|
||||
|
||||
#: ../contrib/image_stack.lua:196
|
||||
msgid ""
|
||||
"correlation threshold for identifying \n"
|
||||
"control points \n"
|
||||
"default: (0.9)."
|
||||
msgstr ""
|
||||
"limiar de correlação para identificar pontos\n"
|
||||
"de controle\n"
|
||||
"padrão: (0,9)"
|
||||
|
||||
#: ../contrib/image_stack.lua:205
|
||||
msgid "select stack function"
|
||||
msgstr "função de seleção de pilha"
|
||||
|
||||
#: ../contrib/image_stack.lua:206
|
||||
msgid ""
|
||||
"select function to be \n"
|
||||
"applied to image stack"
|
||||
msgstr ""
|
||||
"função de seleção a ser aplicada\n"
|
||||
"à pilha de imagens"
|
||||
|
||||
#: ../contrib/image_stack.lua:215
|
||||
msgid "select output format"
|
||||
msgstr "selecionar formato de saída"
|
||||
|
||||
#: ../contrib/image_stack.lua:216
|
||||
msgid "choose the format for the resulting image"
|
||||
msgstr "seleciona o formato para a imagem resultante"
|
||||
|
||||
#: ../contrib/image_stack.lua:224
|
||||
msgid "tag source images used?"
|
||||
msgstr "etiquetas das imagens fonte usadas?"
|
||||
|
||||
#: ../contrib/image_stack.lua:226
|
||||
msgid "tag the source images used to create the output file?"
|
||||
msgstr "etiquetas das imagens fonte usadas para criar o arquivo de saída?"
|
||||
|
||||
#: ../contrib/image_stack.lua:261
|
||||
#, lua-format
|
||||
msgid "Export Image %i/%i"
|
||||
msgstr "Exportar Imagem %i/%i"
|
||||
|
||||
#: ../contrib/image_stack.lua:454
|
||||
msgid "Unrecognized option to copy_image_attributes: "
|
||||
msgstr "Opção não reconhecida para copy_image_attributes: "
|
||||
|
||||
#: ../contrib/image_stack.lua:497
|
||||
msgid "ERROR: at least 2 images required for image stacking, exiting..."
|
||||
msgstr ""
|
||||
"ERRO: pelo menos 2 imagens são necessárias para empilhamento de imagens,"
|
||||
" saindo..."
|
||||
|
||||
#: ../contrib/image_stack.lua:498
|
||||
msgid " image(s) selected, at least 2 required"
|
||||
msgstr " imagem(ns) selecionada(s), pelo menos 2 necessárias"
|
||||
|
||||
#: ../contrib/image_stack.lua:512
|
||||
msgid "aligning images..."
|
||||
msgstr "alinhar imagens..."
|
||||
|
||||
#: ../contrib/image_stack.lua:515
|
||||
msgid "images aligned"
|
||||
msgstr "imagens alinhadas"
|
||||
|
||||
#: ../contrib/image_stack.lua:521
|
||||
msgid "ERROR: image alignment failed"
|
||||
msgstr "ERRO: alinhamento de imagem falhou"
|
||||
|
||||
#: ../contrib/image_stack.lua:522
|
||||
msgid "image alignment failed"
|
||||
msgstr "alinhamento de imagem falhou"
|
||||
|
||||
#: ../contrib/image_stack.lua:527
|
||||
msgid "ERROR: align_image_stack not found"
|
||||
msgstr "ERRO: align_image_stack não encontrado"
|
||||
|
||||
#: ../contrib/image_stack.lua:528
|
||||
msgid "align_image_stack not found"
|
||||
msgstr "align_image_stack não encontrado"
|
||||
|
||||
#: ../contrib/image_stack.lua:542
|
||||
msgid "convert command is "
|
||||
msgstr "comando convert é "
|
||||
|
||||
#: ../contrib/image_stack.lua:543
|
||||
msgid "processing image stack"
|
||||
msgstr "processar empilhamento de imagem"
|
||||
|
||||
#: ../contrib/image_stack.lua:546
|
||||
msgid "image stack processed"
|
||||
msgstr "empilhamento de imagem processado"
|
||||
|
||||
#: ../contrib/image_stack.lua:551
|
||||
msgid "importing result"
|
||||
msgstr "importar resultado"
|
||||
|
||||
#: ../contrib/image_stack.lua:556
|
||||
msgid "Created with|image_stack"
|
||||
msgstr "Criado com|image_stack"
|
||||
|
||||
#: ../contrib/image_stack.lua:569
|
||||
msgid "tagging source images"
|
||||
msgstr "etiquetando imagens fonte"
|
||||
|
||||
#: ../contrib/image_stack.lua:570
|
||||
msgid "Source file|"
|
||||
msgstr "Arquivo fonte |"
|
||||
|
||||
#: ../contrib/image_stack.lua:577
|
||||
msgid "ERROR: image stack processing failed"
|
||||
msgstr "ERRO: processamento de empilhamento de imagem falhou"
|
||||
|
||||
#: ../contrib/image_stack.lua:581
|
||||
msgid "ERROR: convert executable not found"
|
||||
msgstr "ERRO: executável do convert não encontrado"
|
||||
|
||||
#: ../contrib/image_stack.lua:582
|
||||
msgid "convert executable not found"
|
||||
msgstr "executável do convert não encontrado"
|
||||
|
||||
#: ../contrib/image_stack.lua:594
|
||||
msgid "align image stack: use GPU for remaping"
|
||||
msgstr "alinhar pilha de imagens: usar GPU para remapear"
|
||||
|
||||
#: ../contrib/image_stack.lua:595
|
||||
msgid "set the GPU remapping for image align"
|
||||
msgstr "definir o remapeamento de GPU para alinhamento de imagem"
|
||||
|
||||
#: ../contrib/image_stack.lua:598
|
||||
msgid "image stack"
|
||||
msgstr "empilhamento de imagem"
|
||||
244
locale/pt_BR/LC_MESSAGES/image_time.po
Normal file
244
locale/pt_BR/LC_MESSAGES/image_time.po
Normal file
@@ -0,0 +1,244 @@
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
#
|
||||
# Marcus Gama <marcus.gama@gmail.com>, 2021.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-09-28 19:37-0300\n"
|
||||
"PO-Revision-Date: 2021-10-02 05:09-0300\n"
|
||||
"Last-Translator: Marcus Gama <marcus.gama@gmail.com>\n"
|
||||
"Language-Team: Portuguese <darktable-dev@lists.darktable.org>\n"
|
||||
"Language: pt_BR\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||
"X-Generator: Lokalize 21.08.1\n"
|
||||
|
||||
#: ../contrib/image_time.lua:177
|
||||
msgid "Error: 2 images must be selected"
|
||||
msgstr "Erro: 2 imagens devem ser selecionadas"
|
||||
|
||||
#: ../contrib/image_time.lua:230
|
||||
msgid "unable to detect exiv2"
|
||||
msgstr "não foi possível detectar exiv2"
|
||||
|
||||
#: ../contrib/image_time.lua:251 ../contrib/image_time.lua:268
|
||||
msgid "unable to get information for "
|
||||
msgstr "não foi possível obter informações para "
|
||||
|
||||
#: ../contrib/image_time.lua:316
|
||||
msgid "reset time: no images selected"
|
||||
msgstr "reiniciar tempo: nenhuma imagem selecionada"
|
||||
|
||||
#: ../contrib/image_time.lua:317
|
||||
msgid "please select the images that need their time reset"
|
||||
msgstr ""
|
||||
"por favor, selecione as imagens que precisam que seu tempo seja reiniciado"
|
||||
|
||||
#: ../contrib/image_time.lua:330 ../contrib/image_time.lua:355
|
||||
msgid "please select some images and try again"
|
||||
msgstr "por favor, selecione algumas imagens e tente novamente"
|
||||
|
||||
#: ../contrib/image_time.lua:334 ../contrib/image_time.lua:437
|
||||
#: ../contrib/image_time.lua:444
|
||||
msgid "subtract"
|
||||
msgstr "subtrair"
|
||||
|
||||
#: ../contrib/image_time.lua:407
|
||||
msgid "image time"
|
||||
msgstr "tempo da imagem"
|
||||
|
||||
#: ../contrib/image_time.lua:431
|
||||
msgid "years"
|
||||
msgstr "anos"
|
||||
|
||||
#: ../contrib/image_time.lua:431
|
||||
msgid "years to adjust by, 0 - ?"
|
||||
msgstr "anos a ajustar, 0 - ?"
|
||||
|
||||
#: ../contrib/image_time.lua:432
|
||||
msgid "months"
|
||||
msgstr "meses"
|
||||
|
||||
#: ../contrib/image_time.lua:433
|
||||
msgid "days"
|
||||
msgstr "dias"
|
||||
|
||||
#: ../contrib/image_time.lua:434
|
||||
msgid "hours"
|
||||
msgstr "horas"
|
||||
|
||||
#: ../contrib/image_time.lua:434
|
||||
msgid "hours to adjust by, 0-23"
|
||||
msgstr "horas a ajustar, 0-23"
|
||||
|
||||
#: ../contrib/image_time.lua:435
|
||||
msgid "minutes"
|
||||
msgstr "minutos"
|
||||
|
||||
#: ../contrib/image_time.lua:435
|
||||
msgid "minutes to adjust by, 0-59"
|
||||
msgstr "minutos a ajustar, 0-59"
|
||||
|
||||
#: ../contrib/image_time.lua:436 ../contrib/image_time.lua:443
|
||||
msgid "seconds"
|
||||
msgstr "segundos"
|
||||
|
||||
#: ../contrib/image_time.lua:436
|
||||
msgid "seconds to adjust by, 0-59"
|
||||
msgstr "segundos a ajustar, 0-59"
|
||||
|
||||
#: ../contrib/image_time.lua:437 ../contrib/image_time.lua:444
|
||||
msgid "add/subtract"
|
||||
msgstr "adicionar/subtrair"
|
||||
|
||||
#: ../contrib/image_time.lua:437 ../contrib/image_time.lua:444
|
||||
msgid "add or subtract time"
|
||||
msgstr "adicionar ou subtrair tempo"
|
||||
|
||||
#: ../contrib/image_time.lua:437 ../contrib/image_time.lua:444
|
||||
msgid "add"
|
||||
msgstr "adicionar"
|
||||
|
||||
#: ../contrib/image_time.lua:438
|
||||
msgid "year"
|
||||
msgstr "ano"
|
||||
|
||||
#: ../contrib/image_time.lua:438
|
||||
msgid "year to set, 1900 - now"
|
||||
msgstr "ano a definir, 1900 - agora"
|
||||
|
||||
#: ../contrib/image_time.lua:439
|
||||
msgid "month"
|
||||
msgstr "mês"
|
||||
|
||||
#: ../contrib/image_time.lua:439
|
||||
msgid "month to set, 1-12"
|
||||
msgstr "mês a definir, 1-12"
|
||||
|
||||
#: ../contrib/image_time.lua:440
|
||||
msgid "day"
|
||||
msgstr "dia"
|
||||
|
||||
#: ../contrib/image_time.lua:440
|
||||
msgid "day to set, 1-31"
|
||||
msgstr "dia a definir, 1-31"
|
||||
|
||||
#: ../contrib/image_time.lua:441
|
||||
msgid "hour"
|
||||
msgstr "hora"
|
||||
|
||||
#: ../contrib/image_time.lua:441
|
||||
msgid "hour to set, 0-23"
|
||||
msgstr "hora a definir, 0-23"
|
||||
|
||||
#: ../contrib/image_time.lua:442
|
||||
msgid "minute"
|
||||
msgstr "minuto"
|
||||
|
||||
#: ../contrib/image_time.lua:442
|
||||
msgid "minutes to set, 0-59"
|
||||
msgstr "minuto a definir, 0-59"
|
||||
|
||||
#: ../contrib/image_time.lua:443
|
||||
msgid "seconds to set, 0-59"
|
||||
msgstr "segundos a definir, 0-59"
|
||||
|
||||
#: ../contrib/image_time.lua:459
|
||||
msgid "Time difference between images in seconds"
|
||||
msgstr "Diferença de tempo entre as imagens em segundos"
|
||||
|
||||
#: ../contrib/image_time.lua:460
|
||||
msgid "Select 2 images and use the calculate button"
|
||||
msgstr "Selecione 2 imagens e use o botão para calcular"
|
||||
|
||||
#: ../contrib/image_time.lua:465
|
||||
msgid "Calculate"
|
||||
msgstr "Calcular"
|
||||
|
||||
#: ../contrib/image_time.lua:466
|
||||
msgid "calculate time difference between 2 images"
|
||||
msgstr "calcula a diferença de tempo entre 2 imagens"
|
||||
|
||||
#: ../contrib/image_time.lua:473
|
||||
msgid "synchronize image times"
|
||||
msgstr "sincronizar tempos da imagem"
|
||||
|
||||
#: ../contrib/image_time.lua:474
|
||||
msgid "apply the time difference from selected images"
|
||||
msgstr "aplica a diferença de tempo a partir das imagens selecionadas"
|
||||
|
||||
#: ../contrib/image_time.lua:484 ../contrib/image_time.lua:550
|
||||
msgid "adjust time"
|
||||
msgstr "ajustar tempo"
|
||||
|
||||
#: ../contrib/image_time.lua:485
|
||||
msgid "days, months, years"
|
||||
msgstr "dias, meses, anos"
|
||||
|
||||
#: ../contrib/image_time.lua:489
|
||||
msgid "hours, minutes, seconds"
|
||||
msgstr "horas, minutos, segundos"
|
||||
|
||||
#: ../contrib/image_time.lua:493
|
||||
msgid "adjustment direction"
|
||||
msgstr "direção de ajuste"
|
||||
|
||||
#: ../contrib/image_time.lua:496
|
||||
msgid "adjust"
|
||||
msgstr "ajustar"
|
||||
|
||||
#: ../contrib/image_time.lua:504 ../contrib/image_time.lua:551
|
||||
msgid "set time"
|
||||
msgstr "definir tempo"
|
||||
|
||||
#: ../contrib/image_time.lua:505
|
||||
msgid "date: "
|
||||
msgstr "data: "
|
||||
|
||||
#: ../contrib/image_time.lua:509
|
||||
msgid "time:"
|
||||
msgstr "tempo: "
|
||||
|
||||
#: ../contrib/image_time.lua:514
|
||||
msgid "set"
|
||||
msgstr "definir"
|
||||
|
||||
#: ../contrib/image_time.lua:522
|
||||
msgid "synchronize image time"
|
||||
msgstr "sincronizar tempo da imagem"
|
||||
|
||||
#: ../contrib/image_time.lua:523
|
||||
msgid "calculate difference between images"
|
||||
msgstr "calcular a diferença entre imagens"
|
||||
|
||||
#: ../contrib/image_time.lua:526
|
||||
msgid "apply difference"
|
||||
msgstr "aplicar diferença"
|
||||
|
||||
#: ../contrib/image_time.lua:532
|
||||
msgid "reset to original time"
|
||||
msgstr "reiniciar para o tempo original"
|
||||
|
||||
#: ../contrib/image_time.lua:535
|
||||
msgid "reset"
|
||||
msgstr "reiniciar"
|
||||
|
||||
#: ../contrib/image_time.lua:544
|
||||
msgid "mode"
|
||||
msgstr "modo"
|
||||
|
||||
#: ../contrib/image_time.lua:545
|
||||
msgid "select mode"
|
||||
msgstr "selecionar modo"
|
||||
|
||||
#: ../contrib/image_time.lua:552
|
||||
msgid "synchronize time"
|
||||
msgstr "sincronizar tempo"
|
||||
|
||||
#: ../contrib/image_time.lua:553
|
||||
msgid "reset time"
|
||||
msgstr "reiniciar tempo"
|
||||
90
locale/pt_BR/LC_MESSAGES/kml_export.po
Normal file
90
locale/pt_BR/LC_MESSAGES/kml_export.po
Normal file
@@ -0,0 +1,90 @@
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
#
|
||||
# Marcus Gama <marcus.gama@gmail.com>, 2021.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-09-28 19:37-0300\n"
|
||||
"PO-Revision-Date: 2021-10-02 05:14-0300\n"
|
||||
"Last-Translator: Marcus Gama <marcus.gama@gmail.com>\n"
|
||||
"Language-Team: Portuguese <darktable-dev@lists.darktable.org>\n"
|
||||
"Language: pt_BR\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||
"X-Generator: Lokalize 21.08.1\n"
|
||||
|
||||
#: ../contrib/kml_export.lua:64
|
||||
#, lua-format
|
||||
msgid "Export Image %i/%i"
|
||||
msgstr "Exportar Imagem %i/%i"
|
||||
|
||||
#: ../contrib/kml_export.lua:91
|
||||
msgid "magick not found"
|
||||
msgstr "magick não encontrado"
|
||||
|
||||
#: ../contrib/kml_export.lua:96
|
||||
msgid "xdg-user-dir not found"
|
||||
msgstr "xdg-user-dir não encontrado"
|
||||
|
||||
#: ../contrib/kml_export.lua:106
|
||||
msgid "zip not found"
|
||||
msgstr "zip não encontrado"
|
||||
|
||||
#: ../contrib/kml_export.lua:321
|
||||
msgid "KML export: Open KML file after export"
|
||||
msgstr "exportar KML: Abrir arquivo Open KML após a exportação"
|
||||
|
||||
#: ../contrib/kml_export.lua:322 ../contrib/kml_export.lua:329
|
||||
msgid ""
|
||||
"Opens the KML file after the export with the standard program for KML files"
|
||||
msgstr ""
|
||||
"Abre o arquivo KML após a exportação com o programa padrão para arquivos KML"
|
||||
|
||||
#: ../contrib/kml_export.lua:328
|
||||
msgid "KML export: Open KML/KMZ file after export"
|
||||
msgstr "exportar KML: Abre arquivo KML/KMZ após a exportação"
|
||||
|
||||
#: ../contrib/kml_export.lua:348
|
||||
msgid "KML export: Export directory"
|
||||
msgstr "exportar KML: Pasta de exportação"
|
||||
|
||||
#: ../contrib/kml_export.lua:349
|
||||
msgid "A directory that will be used to export the KML/KMZ files"
|
||||
msgstr "Uma pasta que será usada para exportar os arquivos KML/KMZ"
|
||||
|
||||
#: ../contrib/kml_export.lua:356
|
||||
msgid "KML export: ImageMagick binary Location"
|
||||
msgstr "exportar KML: Localização do binário do ImageMagick"
|
||||
|
||||
#: ../contrib/kml_export.lua:357
|
||||
msgid "Install location of magick[.exe]. Requires restart to take effect."
|
||||
msgstr ""
|
||||
"Localização de instalação do magick[.exe]. Precisa reiniciar para ter efeito."
|
||||
|
||||
#: ../contrib/kml_export.lua:364
|
||||
msgid "KML export: Connect images with path"
|
||||
msgstr "exportar KML: Conectar imagens com caminho"
|
||||
|
||||
#: ../contrib/kml_export.lua:365
|
||||
msgid "connect all images with a path"
|
||||
msgstr "conecta todas as imagens com um caminho"
|
||||
|
||||
#: ../contrib/kml_export.lua:372
|
||||
msgid "KML export: Create KMZ file"
|
||||
msgstr "exportar KML: Criar arquivo KMZ"
|
||||
|
||||
#: ../contrib/kml_export.lua:373
|
||||
msgid "Compress all imeges to one KMZ file"
|
||||
msgstr "Comprime todas as imagens para um arquivo KMZ"
|
||||
|
||||
#: ../contrib/kml_export.lua:379
|
||||
msgid "KML Export"
|
||||
msgstr "Exportar KML"
|
||||
|
||||
#: ../contrib/kml_export.lua:381
|
||||
msgid "KML/KMZ Export"
|
||||
msgstr "Exportar KML/KMZ"
|
||||
22
locale/pt_BR/LC_MESSAGES/passport_guide.po
Normal file
22
locale/pt_BR/LC_MESSAGES/passport_guide.po
Normal file
@@ -0,0 +1,22 @@
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
#
|
||||
# Marcus Gama <marcus.gama@gmail.com>, 2021.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-09-28 19:37-0300\n"
|
||||
"PO-Revision-Date: 2021-10-01 19:26-0300\n"
|
||||
"Last-Translator: Marcus Gama <marcus.gama@gmail.com>\n"
|
||||
"Language-Team: Portuguese <darktable-dev@lists.darktable.org>\n"
|
||||
"Language: pt_BR\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||
"X-Generator: Lokalize 21.08.1\n"
|
||||
|
||||
#: ../contrib/passport_guide.lua:90
|
||||
msgid "ISO 19794-5/ICAO 9309 passport"
|
||||
msgstr "passaporte ISO 19794-5/ICAO 9309"
|
||||
70
locale/pt_BR/LC_MESSAGES/pdf_slideshow.po
Normal file
70
locale/pt_BR/LC_MESSAGES/pdf_slideshow.po
Normal file
@@ -0,0 +1,70 @@
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
#
|
||||
# Marcus Gama <marcus.gama@gmail.com>, 2021.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-09-28 19:37-0300\n"
|
||||
"PO-Revision-Date: 2021-10-02 05:16-0300\n"
|
||||
"Last-Translator: Marcus Gama <marcus.gama@gmail.com>\n"
|
||||
"Language-Team: Portuguese <darktable-dev@lists.darktable.org>\n"
|
||||
"Language: pt_BR\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||
"X-Generator: Lokalize 21.08.1\n"
|
||||
|
||||
#: ../contrib/pdf_slideshow.lua:55
|
||||
msgid "pdflatex not found"
|
||||
msgstr "pdflatex não encontrado"
|
||||
|
||||
#: ../contrib/pdf_slideshow.lua:71
|
||||
msgid "a pdf viewer"
|
||||
msgstr "um visualizador de pdf"
|
||||
|
||||
#: ../contrib/pdf_slideshow.lua:72
|
||||
msgid "can be an absolute pathname or the tool may be in the PATH"
|
||||
msgstr "pode ser um caminho absoluto ou a ferramenta pode estar no PATH"
|
||||
|
||||
#: ../contrib/pdf_slideshow.lua:76 ../contrib/pdf_slideshow.lua:103
|
||||
msgid "slideshow title"
|
||||
msgstr "título da apresentação"
|
||||
|
||||
#: ../contrib/pdf_slideshow.lua:80
|
||||
msgid "transition delay (s)"
|
||||
msgstr "atraso da transição (s)"
|
||||
|
||||
#: ../contrib/pdf_slideshow.lua:91
|
||||
msgid "include image title"
|
||||
msgstr "incluir título da imagem"
|
||||
|
||||
#: ../contrib/pdf_slideshow.lua:93
|
||||
msgid "whether to include the image title (if defined) into the slide"
|
||||
msgstr "se deve ser incluído o título da imagem (se definido) no slide"
|
||||
|
||||
#: ../contrib/pdf_slideshow.lua:97
|
||||
msgid "include image author"
|
||||
msgstr "incluir autor da imagem"
|
||||
|
||||
#: ../contrib/pdf_slideshow.lua:99
|
||||
msgid "whether to include the image author (if defined) into the slide"
|
||||
msgstr "se deve ser incluído o autor da imagem (se definido) no slide"
|
||||
|
||||
#: ../contrib/pdf_slideshow.lua:179
|
||||
msgid "pdf slideshow"
|
||||
msgstr "apresentação do pdf"
|
||||
|
||||
#: ../contrib/pdf_slideshow.lua:232
|
||||
msgid "problem running pdflatex"
|
||||
msgstr "problema ao executar o pdflatex"
|
||||
|
||||
#: ../contrib/pdf_slideshow.lua:233 ../contrib/pdf_slideshow.lua:243
|
||||
msgid "problem running "
|
||||
msgstr "problema ao executar "
|
||||
|
||||
#: ../contrib/pdf_slideshow.lua:242
|
||||
msgid "problem running pdf viewer"
|
||||
msgstr "problema ao executar o visualizador de pdf"
|
||||
118
locale/pt_BR/LC_MESSAGES/photils.po
Normal file
118
locale/pt_BR/LC_MESSAGES/photils.po
Normal file
@@ -0,0 +1,118 @@
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
#
|
||||
# Marcus Gama <marcus.gama@gmail.com>, 2021.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-09-28 19:37-0300\n"
|
||||
"PO-Revision-Date: 2021-10-02 05:22-0300\n"
|
||||
"Last-Translator: Marcus Gama <marcus.gama@gmail.com>\n"
|
||||
"Language-Team: Portuguese <darktable-dev@lists.darktable.org>\n"
|
||||
"Language: pt_BR\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||
"X-Generator: Lokalize 21.08.1\n"
|
||||
|
||||
#: ../contrib/photils.lua:117
|
||||
msgid "get tags"
|
||||
msgstr "obter etiquetas"
|
||||
|
||||
#: ../contrib/photils.lua:148
|
||||
msgid "requires a restart to be applied"
|
||||
msgstr "precisa reiniciar para ser aplicado"
|
||||
|
||||
#: ../contrib/photils.lua:163
|
||||
msgid "min confidence value"
|
||||
msgstr "valor mín de confiança"
|
||||
|
||||
#: ../contrib/photils.lua:180
|
||||
msgid ""
|
||||
"The suggested tags were not generated\n"
|
||||
" for the currently selected image!"
|
||||
msgstr ""
|
||||
"As etiquetas sugeridas não serão geradas\n"
|
||||
"para a imagem atualmente selecionada!"
|
||||
|
||||
#: ../contrib/photils.lua:186
|
||||
#, lua-format
|
||||
msgid " page %s of %s "
|
||||
msgstr " página %s de %s "
|
||||
|
||||
#: ../contrib/photils.lua:237
|
||||
msgid "Apply tag to image"
|
||||
msgstr "Aplicar etiqueta à imagem"
|
||||
|
||||
#: ../contrib/photils.lua:249
|
||||
msgid "Tags successfully attached to image"
|
||||
msgstr "Etiquetas anexadas com sucesso à imagem"
|
||||
|
||||
#: ../contrib/photils.lua:299
|
||||
#, lua-format
|
||||
msgid "%s found %d tags for your image"
|
||||
msgstr "%s encontrado %d etiquetas para sua imagem"
|
||||
|
||||
#: ../contrib/photils.lua:315
|
||||
msgid "No image selected."
|
||||
msgstr "Nenhuma imagem selecionada."
|
||||
|
||||
#: ../contrib/photils.lua:319
|
||||
msgid "This plugin can only handle a single image."
|
||||
msgstr "Este plugin pode manipular somente uma imagem por vez."
|
||||
|
||||
#: ../contrib/photils.lua:326
|
||||
#, lua-format
|
||||
msgid "%s failed, see terminal output for details"
|
||||
msgstr "%s falhou, veja a saída do terminal para detalhes"
|
||||
|
||||
#: ../contrib/photils.lua:334
|
||||
#, lua-format
|
||||
msgid "no tags where found"
|
||||
msgstr "nenhuma etiqueta encontrada"
|
||||
|
||||
#: ../contrib/photils.lua:365
|
||||
#, lua-format
|
||||
msgid "attach %d tags"
|
||||
msgstr "anexar %d etiquetas"
|
||||
|
||||
#: ../contrib/photils.lua:429 ../contrib/photils.lua:430
|
||||
msgid "photils-cli not found"
|
||||
msgstr "photils-cli não encontrado"
|
||||
|
||||
#: ../contrib/photils.lua:432
|
||||
msgid ""
|
||||
"Select an image, click \"get tags\" and get \n"
|
||||
"suggestions for tags."
|
||||
msgstr ""
|
||||
"Selecione uma imagem, clique em \"obter etiquetas\"\n"
|
||||
"e obtenha sugestões para etiquetas."
|
||||
|
||||
#: ../contrib/photils.lua:467
|
||||
msgid "photils: show confidence value"
|
||||
msgstr "photils: mostrar valor de confiança"
|
||||
|
||||
#: ../contrib/photils.lua:468
|
||||
msgid "if enabled, the confidence value for each tag is displayed"
|
||||
msgstr "se ativo, o valor de confiança para cada etiqueta é exibido"
|
||||
|
||||
#: ../contrib/photils.lua:474
|
||||
msgid "photils: use exported image for tag request"
|
||||
msgstr "photils: usar imagem exportada para pedido de etiqueta"
|
||||
|
||||
#: ../contrib/photils.lua:475
|
||||
msgid ""
|
||||
"If enabled, the image passed to photils for tag suggestion is based on the "
|
||||
"exported, already edited image. Otherwise, the embedded thumbnail of the RAW "
|
||||
"file will be used for tag suggestion.The embedded thumbnail could speedup "
|
||||
"the tag suggestion but can fail if the RAW file is not supported."
|
||||
msgstr ""
|
||||
"Se ativo, a imagem passada para o photils para a sugestão de etiquetas é"
|
||||
" baseada na "
|
||||
"exportada, a imagem já editada. Caso contrário, a miniatura embutida no"
|
||||
" arquivo RAW "
|
||||
"será usada para sugestão de etiquetas. A miniatura embutida pode acelerar a"
|
||||
" sugestão "
|
||||
"de etiqueta mas pode falhar se o arquivo RAW não for suportado."
|
||||
82
locale/pt_BR/LC_MESSAGES/quicktag.po
Normal file
82
locale/pt_BR/LC_MESSAGES/quicktag.po
Normal file
@@ -0,0 +1,82 @@
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
#
|
||||
# Marcus Gama <marcus.gama@gmail.com>, 2021.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-09-28 19:37-0300\n"
|
||||
"PO-Revision-Date: 2021-10-02 05:25-0300\n"
|
||||
"Last-Translator: Marcus Gama <marcus.gama@gmail.com>\n"
|
||||
"Language-Team: Portuguese <darktable-dev@lists.darktable.org>\n"
|
||||
"Language: pt_BR\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||
"X-Generator: Lokalize 21.08.1\n"
|
||||
|
||||
#: ../contrib/quicktag.lua:78
|
||||
msgid "max. length of button labels"
|
||||
msgstr "comprimento máximo dos rótulos de botão"
|
||||
|
||||
#: ../contrib/quicktag.lua:79
|
||||
msgid "may range from 15 to 60 - needs a restart"
|
||||
msgstr "pode ir de 16 à 60 - precisa reiniciar"
|
||||
|
||||
#: ../contrib/quicktag.lua:92
|
||||
msgid "number of quicktag fields"
|
||||
msgstr "número de campos de quicktag"
|
||||
|
||||
#: ../contrib/quicktag.lua:93
|
||||
msgid "may range from 2 to 20 - needs a restart"
|
||||
msgstr "pode ir de 2 à 20 - precisa reiniciar"
|
||||
|
||||
#: ../contrib/quicktag.lua:133
|
||||
#, lua-format
|
||||
msgid "quicktag %i is empty, please set a tag"
|
||||
msgstr "quicktag %i está vazio, por favor defina uma etiqueta"
|
||||
|
||||
#: ../contrib/quicktag.lua:148
|
||||
msgid "no images selected"
|
||||
msgstr "nenhuma imagem selecionada"
|
||||
|
||||
#: ../contrib/quicktag.lua:158
|
||||
#, lua-format
|
||||
msgid "tag \"%s\" attached to %i image(s)"
|
||||
msgstr "etiqueta \"%s\" anexada a %i imagem(ns)"
|
||||
|
||||
#: ../contrib/quicktag.lua:179
|
||||
msgid "old tag"
|
||||
msgstr "etiqueta antiga"
|
||||
|
||||
#: ../contrib/quicktag.lua:180
|
||||
msgid "select the quicktag to replace"
|
||||
msgstr "selecione a quicktag para substituir"
|
||||
|
||||
#: ../contrib/quicktag.lua:225 ../contrib/quicktag.lua:303
|
||||
#, lua-format
|
||||
msgid "quicktag %i"
|
||||
msgstr "quicktag %i"
|
||||
|
||||
#: ../contrib/quicktag.lua:240 ../contrib/quicktag.lua:264
|
||||
msgid "new tag"
|
||||
msgstr "nova etiqueta"
|
||||
|
||||
#: ../contrib/quicktag.lua:243
|
||||
msgid "enter your tag here"
|
||||
msgstr "insira sua etiqueta aqui"
|
||||
|
||||
#: ../contrib/quicktag.lua:247
|
||||
msgid "set tag"
|
||||
msgstr "definir etiqueta"
|
||||
|
||||
#: ../contrib/quicktag.lua:251
|
||||
msgid "new quicktag is empty!"
|
||||
msgstr "nova quicktag está vazia!"
|
||||
|
||||
#: ../contrib/quicktag.lua:255
|
||||
#, lua-format
|
||||
msgid "quicktag \"%s\" replaced by \"%s\""
|
||||
msgstr "quicktag \"%s\" substituída por \"%s\""
|
||||
234
locale/pt_BR/LC_MESSAGES/rename_images.po
Normal file
234
locale/pt_BR/LC_MESSAGES/rename_images.po
Normal file
@@ -0,0 +1,234 @@
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
#
|
||||
# Marcus Gama <marcus.gama@gmail.com>, 2021.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-09-28 19:37-0300\n"
|
||||
"PO-Revision-Date: 2021-10-02 05:45-0300\n"
|
||||
"Last-Translator: Marcus Gama <marcus.gama@gmail.com>\n"
|
||||
"Language-Team: Portuguese <darktable-dev@lists.darktable.org>\n"
|
||||
"Language: pt_BR\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||
"X-Generator: Lokalize 21.08.1\n"
|
||||
|
||||
#: ../contrib/rename_images.lua:123
|
||||
msgid "unrecognized variable "
|
||||
msgstr "variável não reconhecida "
|
||||
|
||||
#: ../contrib/rename_images.lua:124
|
||||
msgid "unknown variable "
|
||||
msgstr "variável desconhecida "
|
||||
|
||||
#: ../contrib/rename_images.lua:143
|
||||
msgid "rename images"
|
||||
msgstr "renomear imagens"
|
||||
|
||||
#: ../contrib/rename_images.lua:175
|
||||
msgid "pattern is "
|
||||
msgstr "padrão é "
|
||||
|
||||
#: ../contrib/rename_images.lua:179
|
||||
msgid "renaming images"
|
||||
msgstr "renomeando images"
|
||||
|
||||
#: ../contrib/rename_images.lua:186
|
||||
msgid "unable to do variable substitution, exiting..."
|
||||
msgstr "não foi possível a substituição de variável, saindo..."
|
||||
|
||||
#: ../contrib/rename_images.lua:215
|
||||
msgid "renamed "
|
||||
msgstr "renomeado "
|
||||
|
||||
#: ../contrib/rename_images.lua:218
|
||||
msgid "please enter the new name or pattern"
|
||||
msgstr "por favor, insira o novo nome ou padrão"
|
||||
|
||||
#: ../contrib/rename_images.lua:222
|
||||
msgid "please select some images and try again"
|
||||
msgstr "por favor, selecione algumas imagens e tente novamente"
|
||||
|
||||
#: ../contrib/rename_images.lua:235
|
||||
msgid "$(ROLL_NAME) - film roll name\n"
|
||||
msgstr "$(ROLL_NAME) - nome do rolo de filme\n"
|
||||
|
||||
#: ../contrib/rename_images.lua:236
|
||||
msgid "$(FILE_FOLDER) - image file folder\n"
|
||||
msgstr "$(FILE_FOLDER) - pasta do arquivo de imagem\n"
|
||||
|
||||
#: ../contrib/rename_images.lua:237
|
||||
msgid "$(FILE_NAME) - image file name\n"
|
||||
msgstr "$(FILE_NAME) - nome do arquivo de imagem\n"
|
||||
|
||||
#: ../contrib/rename_images.lua:238
|
||||
msgid "$(FILE_EXTENSION) - image file extension\n"
|
||||
msgstr "$(FILE_EXTENSION) - extensão do arquivo de imagem\n"
|
||||
|
||||
#: ../contrib/rename_images.lua:239
|
||||
msgid "$(ID) - image id\n"
|
||||
msgstr "$(ID) - id da imagem\n"
|
||||
|
||||
#: ../contrib/rename_images.lua:240
|
||||
msgid "$(VERSION) - version number\n"
|
||||
msgstr "$(VERSION) - número de versão\n"
|
||||
|
||||
#: ../contrib/rename_images.lua:241
|
||||
msgid "$(SEQUENCE) - sequence number of selection\n"
|
||||
msgstr "$(SEQUENCE) - número de sequência da seleção\n"
|
||||
|
||||
#: ../contrib/rename_images.lua:242
|
||||
msgid "$(YEAR) - current year\n"
|
||||
msgstr "$(YEAR) - ano atual\n"
|
||||
|
||||
#: ../contrib/rename_images.lua:243
|
||||
msgid "$(MONTH) - current month\n"
|
||||
msgstr "$(MONTH) - mês atual\n"
|
||||
|
||||
#: ../contrib/rename_images.lua:244
|
||||
msgid "$(DAY) - current day\n"
|
||||
msgstr "$(DAY) - dia atual\n"
|
||||
|
||||
#: ../contrib/rename_images.lua:245
|
||||
msgid "$(HOUR) - current hour\n"
|
||||
msgstr "$(HOUR) - hora atual\n"
|
||||
|
||||
#: ../contrib/rename_images.lua:246
|
||||
msgid "$(MINUTE) - current minute\n"
|
||||
msgstr "$(MINUTE) - minuto atual\n"
|
||||
|
||||
#: ../contrib/rename_images.lua:247
|
||||
msgid "$(SECOND) - current second\n"
|
||||
msgstr "$(SECOND) - segundo atual\n"
|
||||
|
||||
#: ../contrib/rename_images.lua:248
|
||||
msgid "$(EXIF_YEAR) - EXIF year\n"
|
||||
msgstr "$(EXIF_YEAR) - ano EXIF\n"
|
||||
|
||||
#: ../contrib/rename_images.lua:249
|
||||
msgid "$(EXIF_MONTH) - EXIF month\n"
|
||||
msgstr "$(EXIF_MONTH) - mês EXIF\n"
|
||||
|
||||
#: ../contrib/rename_images.lua:250
|
||||
msgid "$(EXIF_DAY) - EXIF day\n"
|
||||
msgstr "$(EXIF_DAY) - dia EXIF\n"
|
||||
|
||||
#: ../contrib/rename_images.lua:251
|
||||
msgid "$(EXIF_HOUR) - EXIF hour\n"
|
||||
msgstr "$(EXIF_HOUR) - hora EXIF\n"
|
||||
|
||||
#: ../contrib/rename_images.lua:252
|
||||
msgid "$(EXIF_MINUTE) - EXIF minute\n"
|
||||
msgstr "$(EXIF_MINUTE) - minuto EXIF\n"
|
||||
|
||||
#: ../contrib/rename_images.lua:253
|
||||
msgid "$(EXIF_SECOND) - EXIF seconds\n"
|
||||
msgstr "$(EXIF_SECOND) - segundo EXIF\n"
|
||||
|
||||
#: ../contrib/rename_images.lua:254
|
||||
msgid "$(EXIF_ISO) - EXIF ISO\n"
|
||||
msgstr "$(EXIF_ISO) - ISO EXIF\n"
|
||||
|
||||
#: ../contrib/rename_images.lua:255
|
||||
msgid "$(EXIF_EXPOSURE) - EXIF exposure\n"
|
||||
msgstr "$(EXIF_EXPOSURE) - exposição EXIF\n"
|
||||
|
||||
#: ../contrib/rename_images.lua:256
|
||||
msgid "$(EXIF_EXPOSURE_BIAS) - EXIF exposure bias\n"
|
||||
msgstr "$(EXIF_EXPOSURE_BIAS) - viés de exposição EXIF\n"
|
||||
|
||||
#: ../contrib/rename_images.lua:257
|
||||
msgid "$(EXIF_APERTURE) - EXIF aperture\n"
|
||||
msgstr "$(EXIF_APERTURE) - abertura EXIF\n"
|
||||
|
||||
#: ../contrib/rename_images.lua:258
|
||||
msgid "$(EXIF_FOCAL_LENGTH) - EXIF focal length\n"
|
||||
msgstr "$(EXIF_FOCAL_LENGTH) - distância focal EXIF\n"
|
||||
|
||||
#: ../contrib/rename_images.lua:259
|
||||
msgid "$(EXIF_FOCUS_DISTANCE) - EXIF focus distance\n"
|
||||
msgstr "$(EXIF_FOCUS_DISTANCE) - distância do foco EXIF\n"
|
||||
|
||||
#: ../contrib/rename_images.lua:260
|
||||
msgid "$(EXIF_CROP) - EXIF crop\n"
|
||||
msgstr "$(EXIF_CROP) - corte EXIF\n"
|
||||
|
||||
#: ../contrib/rename_images.lua:261
|
||||
msgid "$(LONGITUDE) - longitude\n"
|
||||
msgstr "$(LONGITUDE) - longitude\n"
|
||||
|
||||
#: ../contrib/rename_images.lua:262
|
||||
msgid "$(LATITUDE) - latitude\n"
|
||||
msgstr "$(LATITUDE) - latitude\n"
|
||||
|
||||
#: ../contrib/rename_images.lua:263
|
||||
msgid "$(ELEVATION) - elevation\n"
|
||||
msgstr "$(ELEVATION) - elevação\n"
|
||||
|
||||
#: ../contrib/rename_images.lua:264
|
||||
msgid "$(STARS) - star rating\n"
|
||||
msgstr "$(STARS) - classificação de estrelas\n"
|
||||
|
||||
#: ../contrib/rename_images.lua:265
|
||||
msgid "$(LABELS) - color labels\n"
|
||||
msgstr "$(LABELS) - etiquetas de cor\n"
|
||||
|
||||
#: ../contrib/rename_images.lua:266
|
||||
msgid "$(MAKER) - camera maker\n"
|
||||
msgstr "$(MAKER) - fabricante da câmera\n"
|
||||
|
||||
#: ../contrib/rename_images.lua:267
|
||||
msgid "$(MODEL) - camera model\n"
|
||||
msgstr "$(MODEL) - modelo da câmera\n"
|
||||
|
||||
#: ../contrib/rename_images.lua:268
|
||||
msgid "$(LENS) - lens\n"
|
||||
msgstr "$(LENS) - lente\n"
|
||||
|
||||
#: ../contrib/rename_images.lua:269
|
||||
msgid "$(TITLE) - title from metadata\n"
|
||||
msgstr "$(TITLE) - título a partir dos metadados\n"
|
||||
|
||||
#: ../contrib/rename_images.lua:270
|
||||
msgid "$(DESCRIPTION) - description from metadata\n"
|
||||
msgstr "$(DESCRIPTION) - descrição a partir dos metadados\n"
|
||||
|
||||
#: ../contrib/rename_images.lua:271
|
||||
msgid "$(CREATOR) - creator from metadata\n"
|
||||
msgstr "$(CREATOR) - autor a partir dos metadados\n"
|
||||
|
||||
#: ../contrib/rename_images.lua:272
|
||||
msgid "$(PUBLISHER) - publisher from metadata\n"
|
||||
msgstr "$(PUBLISHER) - editor a partir dos metadados\n"
|
||||
|
||||
#: ../contrib/rename_images.lua:273
|
||||
msgid "$(RIGHTS) - rights from metadata\n"
|
||||
msgstr "$(RIGHTS) - direitos autorais a partir dos metadados\n"
|
||||
|
||||
#: ../contrib/rename_images.lua:274
|
||||
msgid "$(USERNAME) - username\n"
|
||||
msgstr "$(USERNAME) - nome do usuário\n"
|
||||
|
||||
#: ../contrib/rename_images.lua:275
|
||||
msgid "$(PICTURES_FOLDER) - pictures folder\n"
|
||||
msgstr "$(PICTURES_FOLDER) - pasta de imagens\n"
|
||||
|
||||
#: ../contrib/rename_images.lua:276
|
||||
msgid "$(HOME) - user's home directory\n"
|
||||
msgstr "$(HOME) - pasta pessoal do usuário\n"
|
||||
|
||||
#: ../contrib/rename_images.lua:277
|
||||
msgid "$(DESKTOP) - desktop directory"
|
||||
msgstr "$(DESKTOP) - pasta da área de trabalho"
|
||||
|
||||
#: ../contrib/rename_images.lua:278
|
||||
msgid "enter pattern $(FILE_FOLDER)/$(FILE_NAME)"
|
||||
msgstr "insira o padrão $(FILE_FOLDER)/$(FILE_NAME)"
|
||||
|
||||
#: ../contrib/rename_images.lua:288
|
||||
msgid "rename"
|
||||
msgstr "renomear"
|
||||
199
locale/pt_BR/LC_MESSAGES/script_manager.po
Normal file
199
locale/pt_BR/LC_MESSAGES/script_manager.po
Normal file
@@ -0,0 +1,199 @@
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
#
|
||||
# Marcus Gama <marcus.gama@gmail.com>, 2021.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-09-28 11:49-0300\n"
|
||||
"PO-Revision-Date: 2021-09-28 19:41-0300\n"
|
||||
"Language: pt_BR\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Last-Translator: Marcus Gama <marcus.gama@gmail.com>\n"
|
||||
"Language-Team: Portuguese <darktable-dev@lists.darktable.org>\n"
|
||||
"X-Generator: Lokalize 21.08.1\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||
|
||||
#: script_manager.lua:314
|
||||
msgid "Cant read from "
|
||||
msgstr "Não foi possível ler de "
|
||||
|
||||
#: script_manager.lua:332
|
||||
msgid "Loaded "
|
||||
msgstr "Carregado "
|
||||
|
||||
#: script_manager.lua:344
|
||||
msgid " failed to load"
|
||||
msgstr " falhou ao carregar"
|
||||
|
||||
#: script_manager.lua:379 script_manager.lua:634 script_manager.lua:657
|
||||
msgid " stopped"
|
||||
msgstr " parado"
|
||||
|
||||
#: script_manager.lua:383
|
||||
msgid " will not start when darktable is restarted"
|
||||
msgstr " não iniciará quando o darktable for reiniciado"
|
||||
|
||||
#: script_manager.lua:443 script_manager.lua:507
|
||||
msgid "find command is "
|
||||
msgstr "encontrar comando é "
|
||||
|
||||
#: script_manager.lua:469 script_manager.lua:553
|
||||
msgid ""
|
||||
"ERROR: git not found. Install or specify the location of the git executable."
|
||||
msgstr ""
|
||||
"ERRO: git não encontrado. Instale ou defina a localização do executável do"
|
||||
" git."
|
||||
|
||||
#: script_manager.lua:483
|
||||
msgid "lua scripts successfully updated"
|
||||
msgstr "scripts lua atualizados com sucesso"
|
||||
|
||||
#: script_manager.lua:543
|
||||
msgid "category "
|
||||
msgstr "categoria "
|
||||
|
||||
#: script_manager.lua:543
|
||||
msgid " is already in use. Please specify a different category name."
|
||||
msgstr " já está em uso. Por favor, defina um nome de categoria diferente."
|
||||
|
||||
#: script_manager.lua:572
|
||||
msgid "scripts successfully installed into category "
|
||||
msgstr "scripts instalados com sucesso na categoria "
|
||||
|
||||
#: script_manager.lua:588
|
||||
msgid "No scripts found to install"
|
||||
msgstr "Nenhum script para instalação encontrado"
|
||||
|
||||
#: script_manager.lua:592
|
||||
msgid "failed to download scripts"
|
||||
msgstr "falha ao baixar scripts"
|
||||
|
||||
#: script_manager.lua:627
|
||||
msgid " started"
|
||||
msgstr " iniciado"
|
||||
|
||||
#: script_manager.lua:732
|
||||
msgid "Page "
|
||||
msgstr "Página "
|
||||
|
||||
#: script_manager.lua:732
|
||||
msgid " of "
|
||||
msgstr " de "
|
||||
|
||||
#: script_manager.lua:934
|
||||
msgid "scripts to update"
|
||||
msgstr "scripts a atualizar"
|
||||
|
||||
#: script_manager.lua:935
|
||||
msgid "select the scripts installation to update"
|
||||
msgstr "selecione as instalações de scripts a atualizar"
|
||||
|
||||
#: script_manager.lua:944 script_manager.lua:1002
|
||||
msgid "update scripts"
|
||||
msgstr "atualizar scripts"
|
||||
|
||||
#: script_manager.lua:945
|
||||
msgid "update the lua scripts from the repository"
|
||||
msgstr "atualizar os scripts lua a partir do repositório"
|
||||
|
||||
#: script_manager.lua:956
|
||||
msgid ""
|
||||
"enter the URL of the git repository containing the scripts you wish to add"
|
||||
msgstr ""
|
||||
"insira a URL do repositório git contendo os scripts que deseja adicionar"
|
||||
|
||||
#: script_manager.lua:961
|
||||
msgid "name of new category"
|
||||
msgstr "nome da nova categoria"
|
||||
|
||||
#: script_manager.lua:962
|
||||
msgid "enter a category name for the additional scripts"
|
||||
msgstr "insira um nome de categoria para os scripts adicionais"
|
||||
|
||||
#: script_manager.lua:967
|
||||
msgid "URL to download additional scripts from"
|
||||
msgstr "URL da qual baixar os scripts adicionais"
|
||||
|
||||
#: script_manager.lua:969
|
||||
msgid "new category to place scripts in"
|
||||
msgstr "nova categoria para colocar os scripts"
|
||||
|
||||
#: script_manager.lua:972
|
||||
msgid "install additional scripts"
|
||||
msgstr "instalar scripts adicionais"
|
||||
|
||||
#: script_manager.lua:980
|
||||
msgid "Enable \"Disable Scripts\" button"
|
||||
msgstr "Ativar botão \"Desabilitar Scripts\""
|
||||
|
||||
#: script_manager.lua:990
|
||||
msgid "Disable Scripts"
|
||||
msgstr "Desabilitar Scripts"
|
||||
|
||||
#: script_manager.lua:996
|
||||
msgid "lua scripts will not run the next time darktable is started"
|
||||
msgstr "scripts lua não rodarão na próxima vez que o darktable for iniciado"
|
||||
|
||||
#: script_manager.lua:1005
|
||||
msgid "add more scripts"
|
||||
msgstr "adicionar mais scripts"
|
||||
|
||||
#: script_manager.lua:1007
|
||||
msgid "disable scripts"
|
||||
msgstr "desabilitar scripts"
|
||||
|
||||
#: script_manager.lua:1015
|
||||
msgid "category"
|
||||
msgstr "categoria"
|
||||
|
||||
#: script_manager.lua:1016
|
||||
msgid "select the script category"
|
||||
msgstr "selecione a categoria do script"
|
||||
|
||||
#: script_manager.lua:1036
|
||||
msgid "Page:"
|
||||
msgstr "Página:"
|
||||
|
||||
#: script_manager.lua:1064
|
||||
msgid "Scripts"
|
||||
msgstr "Scripts"
|
||||
|
||||
#: script_manager.lua:1073
|
||||
msgid "scripts per page"
|
||||
msgstr "scripts por página"
|
||||
|
||||
#: script_manager.lua:1074
|
||||
msgid "select number of start/stop buttons to display"
|
||||
msgstr "selecione o número de botões de iniciar/parar a exibir"
|
||||
|
||||
#: script_manager.lua:1085
|
||||
msgid "change number of buttons"
|
||||
msgstr "mudar o número de botões"
|
||||
|
||||
#: script_manager.lua:1093
|
||||
msgid "Configuration"
|
||||
msgstr "Configuração"
|
||||
|
||||
#: script_manager.lua:1099
|
||||
msgid "use color interface?"
|
||||
msgstr "usar interface colorida?"
|
||||
|
||||
#: script_manager.lua:1122
|
||||
msgid "action"
|
||||
msgstr "ação"
|
||||
|
||||
#: script_manager.lua:1128
|
||||
msgid "install/update scripts"
|
||||
msgstr "instalar/atualizar scripts"
|
||||
|
||||
#: script_manager.lua:1128
|
||||
msgid "configure"
|
||||
msgstr "configurar"
|
||||
|
||||
#: script_manager.lua:1128
|
||||
msgid "start/stop scripts"
|
||||
msgstr "iniciar/parar scripts"
|
||||
32
locale/pt_BR/LC_MESSAGES/select_untagged.po
Normal file
32
locale/pt_BR/LC_MESSAGES/select_untagged.po
Normal file
@@ -0,0 +1,32 @@
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
#
|
||||
# Marcus Gama <marcus.gama@gmail.com>, 2021.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-09-28 19:37-0300\n"
|
||||
"PO-Revision-Date: 2021-09-28 19:47-0300\n"
|
||||
"Last-Translator: Marcus Gama <marcus.gama@gmail.com>\n"
|
||||
"Language-Team: Portuguese <darktable-dev@lists.darktable.org>\n"
|
||||
"Language: pt_BR\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||
"X-Generator: Lokalize 21.08.1\n"
|
||||
|
||||
#: ../contrib/select_untagged.lua:47
|
||||
msgid "select untagged images"
|
||||
msgstr "selecionar imagens sem etiqueta"
|
||||
|
||||
#: ../contrib/select_untagged.lua:79
|
||||
msgid "select untagged"
|
||||
msgstr "selecionar sem etiqueta"
|
||||
|
||||
#: ../contrib/select_untagged.lua:81
|
||||
msgid "select all images containing no tags or only tags added by darktable"
|
||||
msgstr ""
|
||||
"seleciona todas as imagens que não possuam etiqueta ou somente etiquetas"
|
||||
" adicionadas pelo darktable"
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user