diff --git a/.cursor/debug-config-c53fb5/darktablerc b/.cursor/debug-config-c53fb5/darktablerc new file mode 100644 index 000000000000..ed3de37bb47f --- /dev/null +++ b/.cursor/debug-config-c53fb5/darktablerc @@ -0,0 +1,1040 @@ +accel/assign_instance=false +accel/enable_fallbacks=false +accel/hide_notice=false +accel/load_defaults=true +accel/prefer_enabled=false +accel/prefer_expanded=false +accel/prefer_focused=true +accel/prefer_unmasked=false +accel/select_order=last instance +accel/show_tab_in_prefs=true +accel/slider_precision=0 +allow_lab_output=false +ask_before_copy=true +ask_before_delete=true +ask_before_discard=true +ask_before_move=true +ask_before_remove=true +ask_before_rmdir=false +autosave_interval=10 +backthumbs_inactivity=5.000000 +backthumbs_initialize=false +backthumbs_mipsize=never +bauhaus/color_wheel=true +bauhaus/condensed= +bauhaus/marker_shape=triangle +bauhaus/zoom_step=true +brush_smoothing=medium +cache_color_managed=true +cache_disk_backend=true +cache_disk_backend_full=false +channel_display=false color +cldevice_v5_appleapplem4pro=0 250 0 16 16 4096 0 0 0.000 0.000 0.250 +cldevice_v5_appleapplem4pro_building=-cl-fast-relaxed-math +cldevice_v5_appleapplem4pro_id0=600 +clplatform_amdacceleratedparallelprocessing=false +clplatform_apple=true +clplatform_intelropenclhdgraphics=false +clplatform_nvidiacuda=false +clplatform_openclon12=false +clplatform_other=false +clplatform_rusticl=false +codepaths/openmp_simd=false +colorlabel/blue= +colorlabel/green= +colorlabel/purple= +colorlabel/red= +colorlabel/yellow= +compress_xmp_tags=only large entries +context_help/url=https://docs.darktable.org/usermanual/ +context_help/use_default_url=true +darkroom/modules/channelmixerrgb/colorchecker=0 +darkroom/modules/channelmixerrgb/optimization=0 +darkroom/modules/channelmixerrgb/safety=0.500000 +darkroom/modules/exposure/lightness=50.000000 +darkroom/mouse/middle_button_cycle_zoom_to_200_percent=true +darkroom/ui/0/bottom_visible=TRUE +darkroom/ui/0/header_visible=TRUE +darkroom/ui/0/left_visible=TRUE +darkroom/ui/0/panel_collaps_state= +darkroom/ui/0/panels_collapse_controls=TRUE +darkroom/ui/0/right_visible=TRUE +darkroom/ui/0/toolbar_bottom_visible=TRUE +darkroom/ui/0/toolbar_top_visible=TRUE +darkroom/ui/activate_expand=false +darkroom/ui/anticipate_move=1.200000 +darkroom/ui/auto_module_name_update=true +darkroom/ui/color_assessment_border_white_ratio=0.400000 +darkroom/ui/color_assessment_total_border_width=0.200000 +darkroom/ui/develop_mask_mix=0.300000 +darkroom/ui/hide_header_buttons=always +darkroom/ui/late_scaling/enabled= +darkroom/ui/loading_screen=true +darkroom/ui/overexposed/colorscheme=1 +darkroom/ui/overexposed/enabled= +darkroom/ui/overexposed/lower=-12.689999580383301 +darkroom/ui/overexposed/mode=0 +darkroom/ui/overexposed/upper=99.989997863769531 +darkroom/ui/overlay_color= +darkroom/ui/overlay_contrast=0.500000 +darkroom/ui/rawoverexposed/colorscheme=0 +darkroom/ui/rawoverexposed/enabled= +darkroom/ui/rawoverexposed/mode=0 +darkroom/ui/rawoverexposed/threshold=1 +darkroom/ui/rename_new_instance=false +darkroom/ui/scale_precise_step_multiplier=0.100000 +darkroom/ui/scale_rough_step_multiplier=10.000000 +darkroom/ui/scale_step_multiplier=1.000000 +darkroom/ui/scroll_to_module=true +darkroom/ui/scrollbars=false +darkroom/ui/show_mask_indicator=true +darkroom/ui/sidebar_scroll_default=false +darkroom/ui/single_module=true +darkroom/ui/single_module_group_only=true +darkroom/ui/transition_duration=250 +darkroom/undo/merge_same_secs=10.000000 +darkroom/undo/review_secs=2.000000 +database=library.db +database/create_snapshot=once a week +database/keep_snapshots=10 +database/maintenance_freepage_ratio=25 +database_cache_quality=89 +full_window/color_assessment= +guides/darkroom/0/ashift/autoshow= +guides/darkroom/0/borders/autoshow= +guides/darkroom/0/clipping/autoshow= +guides/darkroom/0/crop/autoshow= +guides/darkroom/0/flip/autoshow= +guides/darkroom/0/global/show= +guides/darkroom/0/lens/autoshow= +guides/lighttable/1/global/show= +libraw_extensions= +lighttable/ui/1/bottom_visible=TRUE +lighttable/ui/1/header_visible=TRUE +lighttable/ui/1/left_visible=TRUE +lighttable/ui/1/panel_collaps_state= +lighttable/ui/1/panels_collapse_controls=TRUE +lighttable/ui/1/right_visible=TRUE +lighttable/ui/1/toolbar_bottom_visible=TRUE +lighttable/ui/1/toolbar_top_visible=TRUE +lighttable/ui/expose_statuses=false +lighttable/ui/milliseconds=false +lighttable/ui/preview/bottom_visible=true +lighttable/ui/preview/header_visible=false +lighttable/ui/preview/left_visible=false +lighttable/ui/preview/panel_collaps_state=1 +lighttable/ui/preview/panels_collapse_controls=false +lighttable/ui/preview/right_visible=false +lighttable/ui/preview/toolbar_bottom_visible=false +lighttable/ui/preview/toolbar_top_visible=false +lighttable/ui/scroll_to_module=false +lighttable/ui/scrollbars=true +lighttable/ui/single_module=false +lighttable/zoomable/last_offset=1 +lighttable/zoomable/last_pos_x=0 +lighttable/zoomable/last_pos_y=0 +lua/_scripts_install/debug=FALSE +lua/_scripts_install/dont_show=FALSE +lua/_scripts_install/initialized= +lua/_scripts_install/remind= +masks_scroll_down_increases=false +max_panel_height=400 +max_panel_width=1500 +metadata/resolution=300 +min_panel_height=64 +min_panel_width=150 +modules/default_presets_first=true +omit_tag_hierarchy=false +opencl=false +opencl_checksum=916815957 +opencl_device_priority=*/!0,*/*/*/!0,* +opencl_library= +opencl_mandatory_timeout=1000 +opencl_scheduling_profile=default +opencl_tune_headroom=false +panel_scrollbars_always_visible=true +performance_configuration_version_completed=18 +pixelpipe_synchronization_timeout=200 +plugins/ai/enabled=false +plugins/ai/provider=auto +plugins/ai/repository=andriiryzhkov/darktable-ai +plugins/capture/camera/live_view_fps=15 +plugins/capture/mode=0 +plugins/collect/descending= +plugins/collect/filmroll_sort=import time +plugins/collection/colors_filter=80000000 +plugins/collection/descending=false +plugins/collection/film_id=1 +plugins/collection/filter_flags=2 +plugins/collection/query_flags=7 +plugins/collection/rating=1 +plugins/collection/rating_comparator=3 +plugins/collection/sort=0 +plugins/collection/text_filter= +plugins/darkroom/0/colorpicker_visible=TRUE +plugins/darkroom/0/duplicate_visible=TRUE +plugins/darkroom/0/export_visible=TRUE +plugins/darkroom/0/history_visible=TRUE +plugins/darkroom/0/ioporder_visible=TRUE +plugins/darkroom/0/masks_visible=TRUE +plugins/darkroom/0/metadata_view_visible=TRUE +plugins/darkroom/0/snapshots_visible=TRUE +plugins/darkroom/0/tagging_visible=TRUE +plugins/darkroom/active= +plugins/darkroom/agx/curve_graph_height=200 +plugins/darkroom/agx/enable_curve_tab=false +plugins/darkroom/agx/enable_curve_warnings=true +plugins/darkroom/agx/expand_curve_advanced=false +plugins/darkroom/agx/expand_curve_graph=false +plugins/darkroom/agx/expand_look_params= +plugins/darkroom/agx/expanded= +plugins/darkroom/agx/favorite=FALSE +plugins/darkroom/agx/look_always_visible=false +plugins/darkroom/agx/visible=FALSE +plugins/darkroom/ashift/autocrop_value=1 +plugins/darkroom/ashift/expand_values=false +plugins/darkroom/ashift/expanded= +plugins/darkroom/ashift/favorite=FALSE +plugins/darkroom/ashift/near_delta=20.000000 +plugins/darkroom/ashift/near_delta_draw=5.000000 +plugins/darkroom/ashift/visible=FALSE +plugins/darkroom/atrous/expanded= +plugins/darkroom/atrous/favorite=FALSE +plugins/darkroom/atrous/graphheight=200 +plugins/darkroom/atrous/gui_channel=0 +plugins/darkroom/atrous/visible=FALSE +plugins/darkroom/basecurve/auto_apply_percamera_presets=false +plugins/darkroom/basecurve/expanded= +plugins/darkroom/basecurve/favorite=FALSE +plugins/darkroom/basecurve/visible=TRUE +plugins/darkroom/basicadj/expanded= +plugins/darkroom/basicadj/favorite=FALSE +plugins/darkroom/basicadj/visible=FALSE +plugins/darkroom/bilat/expanded= +plugins/darkroom/bilat/favorite=FALSE +plugins/darkroom/bilat/visible=TRUE +plugins/darkroom/bilateral/expanded= +plugins/darkroom/bilateral/favorite=FALSE +plugins/darkroom/bilateral/visible=FALSE +plugins/darkroom/bloom/expanded= +plugins/darkroom/bloom/favorite=FALSE +plugins/darkroom/bloom/visible=FALSE +plugins/darkroom/blurs/expanded= +plugins/darkroom/blurs/favorite=FALSE +plugins/darkroom/blurs/visible=FALSE +plugins/darkroom/borders/expanded= +plugins/darkroom/borders/favorite=FALSE +plugins/darkroom/borders/visible=FALSE +plugins/darkroom/cacorrect/expanded= +plugins/darkroom/cacorrect/favorite=FALSE +plugins/darkroom/cacorrect/visible=FALSE +plugins/darkroom/cacorrectrgb/expanded= +plugins/darkroom/cacorrectrgb/favorite=FALSE +plugins/darkroom/cacorrectrgb/visible=FALSE +plugins/darkroom/censorize/expanded= +plugins/darkroom/censorize/favorite=FALSE +plugins/darkroom/censorize/visible=FALSE +plugins/darkroom/channelmixer/expanded= +plugins/darkroom/channelmixer/favorite=FALSE +plugins/darkroom/channelmixer/visible=FALSE +plugins/darkroom/channelmixerrgb/expand_picker_mapping= +plugins/darkroom/channelmixerrgb/expand_values= +plugins/darkroom/channelmixerrgb/expanded= +plugins/darkroom/channelmixerrgb/favorite=FALSE +plugins/darkroom/channelmixerrgb/gui_page=0 +plugins/darkroom/channelmixerrgb/visible=FALSE +plugins/darkroom/clahe/expanded= +plugins/darkroom/clahe/favorite=FALSE +plugins/darkroom/clahe/visible=FALSE +plugins/darkroom/clipping/expanded= +plugins/darkroom/clipping/favorite=FALSE +plugins/darkroom/clipping/guide=0 +plugins/darkroom/clipping/ratio_d=0 +plugins/darkroom/clipping/ratio_n=0 +plugins/darkroom/clipping/visible=TRUE +plugins/darkroom/colisa/expanded= +plugins/darkroom/colisa/favorite=FALSE +plugins/darkroom/colisa/visible=FALSE +plugins/darkroom/colorbalance/controls=HSL +plugins/darkroom/colorbalance/expanded= +plugins/darkroom/colorbalance/favorite=FALSE +plugins/darkroom/colorbalance/layout=list +plugins/darkroom/colorbalance/visible=TRUE +plugins/darkroom/colorbalancergb/checker/size=8 +plugins/darkroom/colorbalancergb/checker1/blue=1 +plugins/darkroom/colorbalancergb/checker1/green=1 +plugins/darkroom/colorbalancergb/checker1/red=1 +plugins/darkroom/colorbalancergb/checker2/blue=0.18000000715255737 +plugins/darkroom/colorbalancergb/checker2/green=0.18000000715255737 +plugins/darkroom/colorbalancergb/checker2/red=0.18000000715255737 +plugins/darkroom/colorbalancergb/expanded= +plugins/darkroom/colorbalancergb/favorite=FALSE +plugins/darkroom/colorbalancergb/graphheight=200 +plugins/darkroom/colorbalancergb/visible=FALSE +plugins/darkroom/colorchecker/expanded= +plugins/darkroom/colorchecker/favorite=FALSE +plugins/darkroom/colorchecker/visible=FALSE +plugins/darkroom/colorcontrast/expanded= +plugins/darkroom/colorcontrast/favorite=FALSE +plugins/darkroom/colorcontrast/visible=FALSE +plugins/darkroom/colorcorrection/expanded= +plugins/darkroom/colorcorrection/favorite=FALSE +plugins/darkroom/colorcorrection/visible=FALSE +plugins/darkroom/colorequal/expand_options= +plugins/darkroom/colorequal/expanded= +plugins/darkroom/colorequal/favorite=FALSE +plugins/darkroom/colorequal/graphheight=200 +plugins/darkroom/colorequal/gui_page=0 +plugins/darkroom/colorequal/show_sliders= +plugins/darkroom/colorequal/visible=FALSE +plugins/darkroom/colorin/expanded= +plugins/darkroom/colorin/favorite=FALSE +plugins/darkroom/colorin/visible=TRUE +plugins/darkroom/colorize/expanded= +plugins/darkroom/colorize/favorite=FALSE +plugins/darkroom/colorize/visible=FALSE +plugins/darkroom/colormapping/expanded= +plugins/darkroom/colormapping/favorite=FALSE +plugins/darkroom/colormapping/visible=FALSE +plugins/darkroom/colorout/expanded= +plugins/darkroom/colorout/favorite=FALSE +plugins/darkroom/colorout/visible=FALSE +plugins/darkroom/colorpicker/expanded=FALSE +plugins/darkroom/colorpicker/windowheight=200 +plugins/darkroom/colorreconstruct/expanded= +plugins/darkroom/colorreconstruct/favorite=FALSE +plugins/darkroom/colorreconstruct/visible=FALSE +plugins/darkroom/colortransfer/expanded= +plugins/darkroom/colortransfer/favorite=FALSE +plugins/darkroom/colortransfer/visible=FALSE +plugins/darkroom/colorzones/bg_sat_factor=0.500000 +plugins/darkroom/colorzones/expanded= +plugins/darkroom/colorzones/favorite=FALSE +plugins/darkroom/colorzones/graphheight=200 +plugins/darkroom/colorzones/gui_channel=0 +plugins/darkroom/colorzones/visible=FALSE +plugins/darkroom/crop/expand_margins=false +plugins/darkroom/crop/expanded= +plugins/darkroom/crop/favorite=FALSE +plugins/darkroom/crop/ratio_d= +plugins/darkroom/crop/ratio_n= +plugins/darkroom/crop/visible=TRUE +plugins/darkroom/defringe/expanded= +plugins/darkroom/defringe/favorite=FALSE +plugins/darkroom/defringe/visible=FALSE +plugins/darkroom/demosaic/expand_capture= +plugins/darkroom/demosaic/expanded= +plugins/darkroom/demosaic/favorite=FALSE +plugins/darkroom/demosaic/fdc_xover_iso=1600 +plugins/darkroom/demosaic/visible=TRUE +plugins/darkroom/denoiseprofile/expanded= +plugins/darkroom/denoiseprofile/favorite=FALSE +plugins/darkroom/denoiseprofile/graphheight=200 +plugins/darkroom/denoiseprofile/show_compute_variance_mode=false +plugins/darkroom/denoiseprofile/visible=TRUE +plugins/darkroom/diffuse/expanded= +plugins/darkroom/diffuse/favorite=FALSE +plugins/darkroom/diffuse/visible=FALSE +plugins/darkroom/dither/expanded= +plugins/darkroom/dither/favorite=FALSE +plugins/darkroom/dither/visible=FALSE +plugins/darkroom/duplicate/expanded=FALSE +plugins/darkroom/duplicate/windowheight=400 +plugins/darkroom/enlargecanvas/expanded= +plugins/darkroom/enlargecanvas/favorite=FALSE +plugins/darkroom/enlargecanvas/visible=FALSE +plugins/darkroom/equalizer/expanded= +plugins/darkroom/equalizer/favorite=FALSE +plugins/darkroom/equalizer/visible=FALSE +plugins/darkroom/export/expanded=FALSE +plugins/darkroom/export/visible=true +plugins/darkroom/exposure/expanded= +plugins/darkroom/exposure/favorite=FALSE +plugins/darkroom/exposure/mapping= +plugins/darkroom/exposure/visible=TRUE +plugins/darkroom/filmic/expanded= +plugins/darkroom/filmic/favorite=FALSE +plugins/darkroom/filmic/visible=FALSE +plugins/darkroom/filmicrgb/expanded= +plugins/darkroom/filmicrgb/favorite=FALSE +plugins/darkroom/filmicrgb/graph_show_labels= +plugins/darkroom/filmicrgb/graph_view= +plugins/darkroom/filmicrgb/graphheight=200 +plugins/darkroom/filmicrgb/visible=FALSE +plugins/darkroom/finalscale/favorite=FALSE +plugins/darkroom/finalscale/visible=FALSE +plugins/darkroom/flip/expanded= +plugins/darkroom/flip/favorite=FALSE +plugins/darkroom/flip/visible=TRUE +plugins/darkroom/gamma/favorite=FALSE +plugins/darkroom/gamma/visible=FALSE +plugins/darkroom/globaltonemap/expanded= +plugins/darkroom/globaltonemap/favorite=FALSE +plugins/darkroom/globaltonemap/visible=FALSE +plugins/darkroom/graduatednd/expanded= +plugins/darkroom/graduatednd/favorite=FALSE +plugins/darkroom/graduatednd/visible=FALSE +plugins/darkroom/grain/expanded= +plugins/darkroom/grain/favorite=FALSE +plugins/darkroom/grain/visible=FALSE +plugins/darkroom/groups=2 +plugins/darkroom/hazeremoval/expanded= +plugins/darkroom/hazeremoval/favorite=FALSE +plugins/darkroom/hazeremoval/visible=TRUE +plugins/darkroom/hide_default_presets=false +plugins/darkroom/highlights/expanded= +plugins/darkroom/highlights/favorite=FALSE +plugins/darkroom/highlights/visible=TRUE +plugins/darkroom/highpass/expanded= +plugins/darkroom/highpass/favorite=FALSE +plugins/darkroom/highpass/visible=FALSE +plugins/darkroom/histogram/graphheight=180 +plugins/darkroom/histogram/histogram=logarithmic +plugins/darkroom/histogram/mode=waveform +plugins/darkroom/histogram/orient=horizontal +plugins/darkroom/histogram/panel_position=right +plugins/darkroom/histogram/show_blue=true +plugins/darkroom/histogram/show_green=true +plugins/darkroom/histogram/show_red=true +plugins/darkroom/histogram/vectorscope=u*v* +plugins/darkroom/histogram/vectorscope/angle=270 +plugins/darkroom/histogram/vectorscope/harmony/dim=0.700000 +plugins/darkroom/histogram/vectorscope/harmony_rotation=0 +plugins/darkroom/histogram/vectorscope/harmony_type=none +plugins/darkroom/histogram/vectorscope/harmony_width=normal +plugins/darkroom/histogram/vectorscope/scale=logarithmic +plugins/darkroom/histogram/waveform=overlaid +plugins/darkroom/history/expanded=FALSE +plugins/darkroom/history/windowheight=1000 +plugins/darkroom/hotpixels/expanded= +plugins/darkroom/hotpixels/favorite=FALSE +plugins/darkroom/hotpixels/visible=FALSE +plugins/darkroom/image_infos_pattern=$(EXIF.EXPOSURE) • f/$(EXIF.APERTURE) • $(EXIF.FOCAL.LENGTH) mm • ISO $(EXIF.ISO) $(GPS.LOCATION.ICON) $(EXIF.FLASH.ICON) +plugins/darkroom/image_infos_position=bottom +plugins/darkroom/invert/expanded= +plugins/darkroom/invert/favorite=FALSE +plugins/darkroom/invert/visible=FALSE +plugins/darkroom/ioporder/expanded=FALSE +plugins/darkroom/lens/expand_fine_tune= +plugins/darkroom/lens/expand_vignette= +plugins/darkroom/lens/expanded= +plugins/darkroom/lens/favorite=FALSE +plugins/darkroom/lens/visible=TRUE +plugins/darkroom/levels/expanded= +plugins/darkroom/levels/favorite=FALSE +plugins/darkroom/levels/graphheight=200 +plugins/darkroom/levels/visible=FALSE +plugins/darkroom/liquify/expanded= +plugins/darkroom/liquify/favorite=FALSE +plugins/darkroom/liquify/visible=FALSE +plugins/darkroom/lowlight/expanded= +plugins/darkroom/lowlight/favorite=FALSE +plugins/darkroom/lowlight/graphheight=200 +plugins/darkroom/lowlight/visible=FALSE +plugins/darkroom/lowpass/expanded= +plugins/darkroom/lowpass/favorite=FALSE +plugins/darkroom/lowpass/visible=FALSE +plugins/darkroom/lut3d/def_path=/Users/arminhammer +plugins/darkroom/lut3d/expanded= +plugins/darkroom/lut3d/favorite=FALSE +plugins/darkroom/lut3d/visible=FALSE +plugins/darkroom/mask_manager/favorite=FALSE +plugins/darkroom/mask_manager/visible=FALSE +plugins/darkroom/masks/brush/border=0.050000 +plugins/darkroom/masks/brush/density=1.000000 +plugins/darkroom/masks/brush/hardness=0.660000 +plugins/darkroom/masks/circle/border=0.050000 +plugins/darkroom/masks/circle/size=0.050000 +plugins/darkroom/masks/ellipse/border=0.050000 +plugins/darkroom/masks/ellipse/flags=0 +plugins/darkroom/masks/ellipse/radius_a=0.050000 +plugins/darkroom/masks/ellipse/radius_b=0.035350 +plugins/darkroom/masks/ellipse/rotation=90.000000 +plugins/darkroom/masks/expand_properties= +plugins/darkroom/masks/expanded=FALSE +plugins/darkroom/masks/gradient/compression=0.500000 +plugins/darkroom/masks/gradient/rotation=0.000000 +plugins/darkroom/masks/gradient/steepness=0.000000 +plugins/darkroom/masks/heightview=300 +plugins/darkroom/masks/opacity=1.000000 +plugins/darkroom/masks/path/border=0.050000 +plugins/darkroom/metadata_view/expanded=FALSE +plugins/darkroom/modulegroups/last_preset=workflow: scene-referred +plugins/darkroom/modulegroups_basics_sections_labels=true +plugins/darkroom/modulegroups_preset=workflow: scene-referred +plugins/darkroom/monochrome/expanded= +plugins/darkroom/monochrome/favorite=FALSE +plugins/darkroom/monochrome/visible=FALSE +plugins/darkroom/navigation/graphheight=200 +plugins/darkroom/negadoctor/expanded= +plugins/darkroom/negadoctor/favorite=FALSE +plugins/darkroom/negadoctor/visible=FALSE +plugins/darkroom/nlmeans/expanded= +plugins/darkroom/nlmeans/favorite=FALSE +plugins/darkroom/nlmeans/visible=FALSE +plugins/darkroom/overexposed/favorite=FALSE +plugins/darkroom/overexposed/visible=FALSE +plugins/darkroom/overlay/expanded= +plugins/darkroom/overlay/favorite=FALSE +plugins/darkroom/overlay/visible=FALSE +plugins/darkroom/panel_swap=false +plugins/darkroom/primaries/expanded= +plugins/darkroom/primaries/favorite=FALSE +plugins/darkroom/primaries/visible=FALSE +plugins/darkroom/profile_gamma/expanded= +plugins/darkroom/profile_gamma/favorite=FALSE +plugins/darkroom/profile_gamma/visible=FALSE +plugins/darkroom/rasterfile/expanded= +plugins/darkroom/rasterfile/favorite=FALSE +plugins/darkroom/rasterfile/visible=FALSE +plugins/darkroom/rawdenoise/expanded= +plugins/darkroom/rawdenoise/favorite=FALSE +plugins/darkroom/rawdenoise/graphheight=200 +plugins/darkroom/rawdenoise/gui_channel=0 +plugins/darkroom/rawdenoise/visible=FALSE +plugins/darkroom/rawoverexposed/favorite=FALSE +plugins/darkroom/rawoverexposed/visible=FALSE +plugins/darkroom/rawprepare/allow_editing_crop=false +plugins/darkroom/rawprepare/expanded= +plugins/darkroom/rawprepare/favorite=FALSE +plugins/darkroom/rawprepare/visible=FALSE +plugins/darkroom/relight/expanded= +plugins/darkroom/relight/favorite=FALSE +plugins/darkroom/relight/visible=FALSE +plugins/darkroom/retouch/default_algo=2 +plugins/darkroom/retouch/expanded= +plugins/darkroom/retouch/favorite=FALSE +plugins/darkroom/retouch/visible=FALSE +plugins/darkroom/rgbcurve/expanded= +plugins/darkroom/rgbcurve/favorite=FALSE +plugins/darkroom/rgbcurve/visible=FALSE +plugins/darkroom/rgblevels/expanded= +plugins/darkroom/rgblevels/favorite=FALSE +plugins/darkroom/rgblevels/graphheight=200 +plugins/darkroom/rgblevels/visible=TRUE +plugins/darkroom/rotatepixels/favorite=FALSE +plugins/darkroom/rotatepixels/visible=FALSE +plugins/darkroom/scalepixels/expanded= +plugins/darkroom/scalepixels/favorite=FALSE +plugins/darkroom/scalepixels/visible=FALSE +plugins/darkroom/segments/def_path=/Users/arminhammer +plugins/darkroom/shadhi/expanded= +plugins/darkroom/shadhi/favorite=FALSE +plugins/darkroom/shadhi/visible=FALSE +plugins/darkroom/sharpen/expanded= +plugins/darkroom/sharpen/favorite=FALSE +plugins/darkroom/sharpen/visible=TRUE +plugins/darkroom/show_guides_in_ui=true +plugins/darkroom/show_warnings=true +plugins/darkroom/sigmoid/expand_primaries= +plugins/darkroom/sigmoid/expand_values= +plugins/darkroom/sigmoid/expanded= +plugins/darkroom/sigmoid/favorite=FALSE +plugins/darkroom/sigmoid/visible=FALSE +plugins/darkroom/snapshots/expanded=FALSE +plugins/darkroom/snapshots/windowheight=200 +plugins/darkroom/soften/expanded= +plugins/darkroom/soften/favorite=FALSE +plugins/darkroom/soften/visible=FALSE +plugins/darkroom/splittoning/expanded= +plugins/darkroom/splittoning/favorite=FALSE +plugins/darkroom/splittoning/visible=FALSE +plugins/darkroom/spots/brush_border=0.050000 +plugins/darkroom/spots/brush_density=1.000000 +plugins/darkroom/spots/brush_hardness=0.660000 +plugins/darkroom/spots/circle_border=0.020000 +plugins/darkroom/spots/circle_size=0.020000 +plugins/darkroom/spots/ellipse_border=0.020000 +plugins/darkroom/spots/ellipse_flags=0 +plugins/darkroom/spots/ellipse_radius_a=0.020000 +plugins/darkroom/spots/ellipse_radius_b=0.014140 +plugins/darkroom/spots/ellipse_rotation=90.000000 +plugins/darkroom/spots/expanded= +plugins/darkroom/spots/favorite=FALSE +plugins/darkroom/spots/path_border=0.050000 +plugins/darkroom/spots/visible=FALSE +plugins/darkroom/tagging/expanded=FALSE +plugins/darkroom/tagging/visible=true +plugins/darkroom/temperature/button_bar=true +plugins/darkroom/temperature/colored_sliders=no color +plugins/darkroom/temperature/expand_coefficients=false +plugins/darkroom/temperature/expanded= +plugins/darkroom/temperature/favorite=FALSE +plugins/darkroom/temperature/visible=TRUE +plugins/darkroom/tonecurve/expanded= +plugins/darkroom/tonecurve/favorite=FALSE +plugins/darkroom/tonecurve/visible=FALSE +plugins/darkroom/toneequal/expanded= +plugins/darkroom/toneequal/favorite=FALSE +plugins/darkroom/toneequal/gui_page=0 +plugins/darkroom/toneequal/visible=TRUE +plugins/darkroom/tonemap/expanded= +plugins/darkroom/tonemap/favorite=FALSE +plugins/darkroom/tonemap/visible=FALSE +plugins/darkroom/ui/border_size=10 +plugins/darkroom/velvia/expanded= +plugins/darkroom/velvia/favorite=FALSE +plugins/darkroom/velvia/visible=FALSE +plugins/darkroom/vibrance/expanded= +plugins/darkroom/vibrance/favorite=FALSE +plugins/darkroom/vibrance/visible=FALSE +plugins/darkroom/vignette/expanded= +plugins/darkroom/vignette/favorite=FALSE +plugins/darkroom/vignette/visible=FALSE +plugins/darkroom/watermark/color_blue= +plugins/darkroom/watermark/color_green= +plugins/darkroom/watermark/color_red= +plugins/darkroom/watermark/expanded= +plugins/darkroom/watermark/favorite=FALSE +plugins/darkroom/watermark/font= +plugins/darkroom/watermark/text= +plugins/darkroom/watermark/visible=FALSE +plugins/darkroom/workflow=scene-referred (sigmoid) +plugins/darkroom/zonesystem/expanded= +plugins/darkroom/zonesystem/favorite=FALSE +plugins/darkroom/zonesystem/visible=FALSE +plugins/imageio/format/avif/bpp=8 +plugins/imageio/format/avif/color_mode=false +plugins/imageio/format/avif/compression_type=1 +plugins/imageio/format/avif/quality=90 +plugins/imageio/format/avif/subsample=0 +plugins/imageio/format/avif/tiling=true +plugins/imageio/format/exr/bpp=32 +plugins/imageio/format/exr/compression=4 +plugins/imageio/format/j2k/preset= +plugins/imageio/format/j2k/quality=95 +plugins/imageio/format/jpeg/quality=95 +plugins/imageio/format/jpeg/subsample= +plugins/imageio/format/jxl/bpp=8 +plugins/imageio/format/jxl/effort=7 +plugins/imageio/format/jxl/original=false +plugins/imageio/format/jxl/pixel_type=false +plugins/imageio/format/jxl/quality=95 +plugins/imageio/format/jxl/tier=0 +plugins/imageio/format/pdf/border=0 mm +plugins/imageio/format/pdf/bpp=8 +plugins/imageio/format/pdf/compression=1 +plugins/imageio/format/pdf/dpi=300.000000 +plugins/imageio/format/pdf/icc= +plugins/imageio/format/pdf/mode= +plugins/imageio/format/pdf/orientation= +plugins/imageio/format/pdf/pages= +plugins/imageio/format/pdf/rotate= +plugins/imageio/format/pdf/size=a4 +plugins/imageio/format/pdf/title= +plugins/imageio/format/png/bpp=8 +plugins/imageio/format/png/compression=5 +plugins/imageio/format/tiff/bpp=8 +plugins/imageio/format/tiff/compress=2 +plugins/imageio/format/tiff/compresslevel=6 +plugins/imageio/format/tiff/pixelformat=false +plugins/imageio/format/tiff/shortfile=false +plugins/imageio/format/webp/comp_type=0 +plugins/imageio/format/webp/hint=0 +plugins/imageio/format/webp/quality=95 +plugins/imageio/format/xcf/bpp=32 +plugins/imageio/storage/disk/file_directory=$(FILE_FOLDER)/darktable_exported/$(FILE_NAME) +plugins/imageio/storage/disk/overwrite= +plugins/imageio/storage/email/client= +plugins/imageio/storage/export/auto_login=false +plugins/imageio/storage/export/piwigo/filename_pattern= +plugins/imageio/storage/export/piwigo/server= +plugins/imageio/storage/gallery/file_directory=$(HOME)/darktable_gallery/img_$(SEQUENCE) +plugins/imageio/storage/gallery/title=darktable gallery +plugins/imageio/storage/gphoto/id=642055548087-n01fgvugnbns7a9jq8jfucjsn5l1t6so.apps.googleusercontent.com +plugins/imageio/storage/gphoto/secret=o29QcbsDWS5cauRqdmGdF3sP +plugins/imageio/storage/latex/file_directory= +plugins/imageio/storage/latex/title= +plugins/lighttable/1/filmstrip_visible=FALSE +plugins/lighttable/1/timeline_visible=TRUE +plugins/lighttable/act_on=true +plugins/lighttable/audio_player=afplay +plugins/lighttable/base_layout=1 +plugins/lighttable/collect/expanded=FALSE +plugins/lighttable/collect/history0=1:0:0:/Users/arminhammer/Pictures$ +plugins/lighttable/collect/history1=1:0:0:/Users/arminhammer/Downloads$ +plugins/lighttable/collect/history2=1:0:0:%$ +plugins/lighttable/collect/history3= +plugins/lighttable/collect/history4= +plugins/lighttable/collect/history5= +plugins/lighttable/collect/history6= +plugins/lighttable/collect/history7= +plugins/lighttable/collect/history8= +plugins/lighttable/collect/history9= +plugins/lighttable/collect/history_max=10 +plugins/lighttable/collect/history_next_pos=0 +plugins/lighttable/collect/history_pos0=26 +plugins/lighttable/collect/history_pos1=1 +plugins/lighttable/collect/history_pos2=1 +plugins/lighttable/collect/history_pos3=1 +plugins/lighttable/collect/history_pos4=0 +plugins/lighttable/collect/history_pos5=0 +plugins/lighttable/collect/history_pos6=0 +plugins/lighttable/collect/history_pos7=0 +plugins/lighttable/collect/history_pos8=0 +plugins/lighttable/collect/history_pos9=0 +plugins/lighttable/collect/item0=0 +plugins/lighttable/collect/item1=0 +plugins/lighttable/collect/item2=0 +plugins/lighttable/collect/item3=0 +plugins/lighttable/collect/item4=0 +plugins/lighttable/collect/item5=0 +plugins/lighttable/collect/item6=0 +plugins/lighttable/collect/item7=0 +plugins/lighttable/collect/item8=0 +plugins/lighttable/collect/item9=0 +plugins/lighttable/collect/mode0=0 +plugins/lighttable/collect/mode1=0 +plugins/lighttable/collect/mode2=0 +plugins/lighttable/collect/mode3=0 +plugins/lighttable/collect/mode4=0 +plugins/lighttable/collect/mode5=0 +plugins/lighttable/collect/mode6=0 +plugins/lighttable/collect/mode7=0 +plugins/lighttable/collect/mode8=0 +plugins/lighttable/collect/mode9=0 +plugins/lighttable/collect/mode99999= +plugins/lighttable/collect/num_rules=1 +plugins/lighttable/collect/single-click=false +plugins/lighttable/collect/string0=/Users/arminhammer/Pictures +plugins/lighttable/collect/string1= +plugins/lighttable/collect/string2= +plugins/lighttable/collect/string3= +plugins/lighttable/collect/string4= +plugins/lighttable/collect/string5= +plugins/lighttable/collect/string6= +plugins/lighttable/collect/string7= +plugins/lighttable/collect/string8= +plugins/lighttable/collect/string9= +plugins/lighttable/collect/windowheight=500 +plugins/lighttable/collect_visible=TRUE +plugins/lighttable/copy_history/expanded=FALSE +plugins/lighttable/copy_history/pastemode=0 +plugins/lighttable/copy_history_visible=TRUE +plugins/lighttable/copy_metadata/colors= +plugins/lighttable/copy_metadata/geotags= +plugins/lighttable/copy_metadata/metadata= +plugins/lighttable/copy_metadata/pastemode= +plugins/lighttable/copy_metadata/rating= +plugins/lighttable/copy_metadata/tags= +plugins/lighttable/culling_last_id=-1 +plugins/lighttable/culling_num_images=2 +plugins/lighttable/culling_zoom_mode=0 +plugins/lighttable/draw_group_borders=true +plugins/lighttable/export/ask_before_export_overwrite=true +plugins/lighttable/export/batch_export_expanded= +plugins/lighttable/export/dimensions_type=0 +plugins/lighttable/export/expanded=FALSE +plugins/lighttable/export/export_masks=FALSE +plugins/lighttable/export/force_lcms2=false +plugins/lighttable/export/format_name=jpeg +plugins/lighttable/export/height=0 +plugins/lighttable/export/high_quality_processing=false +plugins/lighttable/export/iccintent=-1 +plugins/lighttable/export/iccprofile= +plugins/lighttable/export/icctype=-1 +plugins/lighttable/export/pixel_interpolator=lanczos3 +plugins/lighttable/export/pixel_interpolator_warp=bicubic +plugins/lighttable/export/print_dpi=300 +plugins/lighttable/export/resizing_factor= +plugins/lighttable/export/storage_name=disk +plugins/lighttable/export/style= +plugins/lighttable/export/style_append= +plugins/lighttable/export/upscale= +plugins/lighttable/export/width=0 +plugins/lighttable/export_visible=TRUE +plugins/lighttable/extended_pattern=$(FILE_NAME).$(FILE_EXTENSION)$(NL)$(EXIF.EXPOSURE)f/$(EXIF.APERTURE)$(EXIF.FOCAL.LENGTH)mm • ISO $(EXIF.ISO) $(GPS.LOCATION.ICON) $(EXIF.FLASH.ICON) $(SIDECAR_TXT) +plugins/lighttable/filtering/expanded=FALSE +plugins/lighttable/filtering/history0=3:0:32:0:1:%$0:18:0:1:0x80000000$0:33:0:1:%$ +plugins/lighttable/filtering/history1=3:0:32:0:1:%$0:18:0:1:%$0:33:0:1:%$ +plugins/lighttable/filtering/history2= +plugins/lighttable/filtering/history3= +plugins/lighttable/filtering/history4= +plugins/lighttable/filtering/history5= +plugins/lighttable/filtering/history6= +plugins/lighttable/filtering/history7= +plugins/lighttable/filtering/history8= +plugins/lighttable/filtering/history9= +plugins/lighttable/filtering/history_max=10 +plugins/lighttable/filtering/item0=32 +plugins/lighttable/filtering/item1=18 +plugins/lighttable/filtering/item2=33 +plugins/lighttable/filtering/lastsort= +plugins/lighttable/filtering/lastsortorder= +plugins/lighttable/filtering/mode0=0 +plugins/lighttable/filtering/mode1=0 +plugins/lighttable/filtering/mode2=0 +plugins/lighttable/filtering/num_rules=3 +plugins/lighttable/filtering/num_sort=1 +plugins/lighttable/filtering/off0=0 +plugins/lighttable/filtering/off1=0 +plugins/lighttable/filtering/off2=0 +plugins/lighttable/filtering/sort0=0 +plugins/lighttable/filtering/sort_history_max=10 +plugins/lighttable/filtering/sortorder0=0 +plugins/lighttable/filtering/string0= +plugins/lighttable/filtering/string1=0x80000000 +plugins/lighttable/filtering/string2= +plugins/lighttable/filtering/top0=1 +plugins/lighttable/filtering/top1=1 +plugins/lighttable/filtering/top2=1 +plugins/lighttable/filtering_visible=TRUE +plugins/lighttable/geotagging/expanded=FALSE +plugins/lighttable/geotagging/heighttracklist=50 +plugins/lighttable/geotagging/tz=UTC +plugins/lighttable/geotagging_visible=TRUE +plugins/lighttable/hide_default_presets=false +plugins/lighttable/image/expanded=TRUE +plugins/lighttable/image_visible=TRUE +plugins/lighttable/images_in_row=5 +plugins/lighttable/import/expanded=TRUE +plugins/lighttable/import_visible=TRUE +plugins/lighttable/layout=1 +plugins/lighttable/live_view/overlay_imgid= +plugins/lighttable/live_view/overlay_mode= +plugins/lighttable/live_view/splitline= +plugins/lighttable/lua_scripts_installer/expanded=FALSE +plugins/lighttable/lua_scripts_installer_visible=TRUE +plugins/lighttable/metadata/PreservedFileName_flag=4 +plugins/lighttable/metadata/creator_flag= +plugins/lighttable/metadata/creator_text_height=1 +plugins/lighttable/metadata/description_flag= +plugins/lighttable/metadata/description_text_height=1 +plugins/lighttable/metadata/expanded=FALSE +plugins/lighttable/metadata/image_id_flag=4 +plugins/lighttable/metadata/notes_flag= +plugins/lighttable/metadata/notes_text_height=1 +plugins/lighttable/metadata/preserved filename_flag= +plugins/lighttable/metadata/publisher_flag= +plugins/lighttable/metadata/publisher_text_height=1 +plugins/lighttable/metadata/rights_flag= +plugins/lighttable/metadata/rights_text_height=1 +plugins/lighttable/metadata/title_flag= +plugins/lighttable/metadata/title_text_height=1 +plugins/lighttable/metadata/version name_flag= +plugins/lighttable/metadata/version name_text_height=1 +plugins/lighttable/metadata/version_name_flag=4 +plugins/lighttable/metadata_view/expanded=FALSE +plugins/lighttable/metadata_view/pretty_location=true +plugins/lighttable/metadata_view/visible= +plugins/lighttable/metadata_view/windowheight=1000 +plugins/lighttable/metadata_view_visible=TRUE +plugins/lighttable/metadata_visible=TRUE +plugins/lighttable/overlay_timeout=3 +plugins/lighttable/overlays/0/0=0 +plugins/lighttable/overlays/0/1=1 +plugins/lighttable/overlays/0/2=4 +plugins/lighttable/overlays/1/0=0 +plugins/lighttable/overlays/1/1=1 +plugins/lighttable/overlays/1/2=1 +plugins/lighttable/overlays/2/0=0 +plugins/lighttable/overlays/2/1=1 +plugins/lighttable/overlays/2/2=4 +plugins/lighttable/overlays/culling/0=6 +plugins/lighttable/overlays/culling/1=6 +plugins/lighttable/preset/ask_before_delete_preset=true +plugins/lighttable/preview/max_in_memory_images=4 +plugins/lighttable/recentcollect/line0= +plugins/lighttable/recentcollect/line1= +plugins/lighttable/recentcollect/line2= +plugins/lighttable/recentcollect/line3= +plugins/lighttable/recentcollect/line4= +plugins/lighttable/recentcollect/line5= +plugins/lighttable/recentcollect/line6= +plugins/lighttable/recentcollect/line7= +plugins/lighttable/recentcollect/line8= +plugins/lighttable/recentcollect/line9= +plugins/lighttable/recentcollect/max_items=10 +plugins/lighttable/recentcollect/num_items=0 +plugins/lighttable/recentcollect/windowheight=1000 +plugins/lighttable/select/expanded=FALSE +plugins/lighttable/select_visible=TRUE +plugins/lighttable/style/applymode= +plugins/lighttable/style/ask_before_delete_style=true +plugins/lighttable/style/preview_size=0 +plugins/lighttable/style/windowheight=400 +plugins/lighttable/styles/expanded=FALSE +plugins/lighttable/styles_visible=TRUE +plugins/lighttable/tagging/ask_before_delete_tag=true +plugins/lighttable/tagging/case_sensitivity=insensitive +plugins/lighttable/tagging/confidence=50 +plugins/lighttable/tagging/dttags=false +plugins/lighttable/tagging/expanded=FALSE +plugins/lighttable/tagging/heightattachedwindow=100 +plugins/lighttable/tagging/heightdictionarywindow=200 +plugins/lighttable/tagging/hidehierarchy=false +plugins/lighttable/tagging/listsortedbycount=false +plugins/lighttable/tagging/nb_recent_tags=20 +plugins/lighttable/tagging/no_uncategorized=false +plugins/lighttable/tagging/nosuggestion=false +plugins/lighttable/tagging/recent_tags= +plugins/lighttable/tagging/treeview=false +plugins/lighttable/tagging_visible=TRUE +plugins/lighttable/thumbnail_hq_min_level=720p +plugins/lighttable/thumbnail_raw_min_level=never +plugins/lighttable/thumbnail_sizes=120|400 +plugins/lighttable/thumbnail_tooltip_pattern=$(FILE_NAME).$(FILE_EXTENSION)$(NL)$(EXIF.DATE.REGIONAL) $(EXIF.TIME.REGIONAL) $(GPS.LOCATION.ICON) $(EXIF.FLASH.ICON)$(NL)$(EXIF.EXPOSURE)f/$(EXIF.APERTURE)$(EXIF.FOCAL.LENGTH)mm • ISO $(EXIF.ISO) +plugins/lighttable/timeline/last_zoom=0 +plugins/lighttable/tooltips/0/0=true +plugins/lighttable/tooltips/0/1=true +plugins/lighttable/tooltips/0/2=false +plugins/lighttable/tooltips/1/0=TRUE +plugins/lighttable/tooltips/1/1=TRUE +plugins/lighttable/tooltips/1/2=TRUE +plugins/lighttable/tooltips/2/0=TRUE +plugins/lighttable/tooltips/2/1=TRUE +plugins/lighttable/tooltips/2/2=FALSE +plugins/lighttable/tooltips/culling/0=false +plugins/lighttable/tooltips/culling/1=false +plugins/map/epsilon_factor=25 +plugins/map/filter_images_drawn=false +plugins/map/geotagging_search_url=https://nominatim.openstreetmap.org/search?q=%s&format=xml&limit=%d&polygon_text=1 +plugins/map/images_thumbnail=thumbnail +plugins/map/latitude=40.540054321289062 +plugins/map/locationshape= +plugins/map/longitude=-111.40138244628906 +plugins/map/map_source=OpenStreetMap I +plugins/map/max_images_drawn=100 +plugins/map/max_outline_nodes=10000 +plugins/map/min_images_per_group=1 +plugins/map/show_map_osd=true +plugins/map/show_outline=true +plugins/map/showalllocations=FALSE +plugins/map/zoom=6 +plugins/midi/devices= +plugins/print/print/black_point_compensation=TRUE +plugins/print/print/bottom_margin=17.000000 +plugins/print/print/grid_size=10.000000 +plugins/print/print/iccintent= +plugins/print/print/iccprofile= +plugins/print/print/icctype=-1 +plugins/print/print/left_margin=17.000000 +plugins/print/print/lock_borders= +plugins/print/print/right_margin=17.000000 +plugins/print/print/style= +plugins/print/print/style_append= +plugins/print/print/top_margin=17.000000 +plugins/print/print/unit=mm +plugins/print/printer/iccintent= +plugins/print/printer/iccprofile= +plugins/print/printer/icctype=-1 +plugins/pwstorage/pwstorage_backend=apple_keychain +plugins/session/jobcode=capture job +pressure_sensitivity=off +rating_one_double_tap=false +resource_default=512 8 128 700 +resource_large=700 16 128 900 +resource_small=128 4 64 400 +resource_unrestricted=16384 1024 128 900 +resourcelevel=default +run_crawler_on_start=false +screen_dpi_overwrite=-1.000000 +second_window/color_assessment= +second_window/last_visible=FALSE +send_to_trash=true +session/base_directory_pattern=$(PICTURES_FOLDER)/Darktable +session/filename_pattern=$(YEAR)$(MONTH)$(DAY)_$(SEQUENCE).$(FILE_EXTENSION) +session/sub_directory_pattern=$(YEAR)$(MONTH)$(DAY)_$(JOBCODE) +session/use_filename=false +setup_import_directory= +show_folder_levels=1 +show_splash_screen=true +slideshow/ui/panel_collaps_state=1 +slideshow/ui/panels_collapse_controls=false +slideshow_delay=5 +storage/piwigo/conflict=0 +storage/piwigo/last_album= +storage/piwigo/overwrite=0 +thumbtable_fractional_scrolling=false +ui/detect_mono_exif=false +ui/show_focus_peaking=FALSE +ui/style/large_preview_size=500 +ui/style/preview_size=250 +ui_last/color/display2_filename= +ui_last/color/display2_intent=0 +ui_last/color/display2_type=19 +ui_last/color/display_filename= +ui_last/color/display_intent=0 +ui_last/color/display_type=8 +ui_last/color/histogram_filename= +ui_last/color/histogram_type=1 +ui_last/color/mode=0 +ui_last/color/softproof_filename= +ui_last/color/softproof_intent=0 +ui_last/color/softproof_type=1 +ui_last/colorpicker_display_samples=false +ui_last/colorpicker_large=false +ui_last/colorpicker_mode=mean +ui_last/colorpicker_model=RGB +ui_last/colorpicker_restrict_histogram=false +ui_last/copy_history_dialog_height=450 +ui_last/copy_history_dialog_width=1 +ui_last/display_profile_source=all +ui_last/expander_histogram=-1 +ui_last/expander_history=-1 +ui_last/expander_import=TRUE +ui_last/expander_metadata=0 +ui_last/expander_navigation=-1 +ui_last/expander_snapshots=-1 +ui_last/fullscreen=FALSE +ui_last/grouping=false +ui_last/ignore_exif_rating=false +ui_last/import_apply_metadata=false +ui_last/import_custom_places= +ui_last/import_datetime_override= +ui_last/import_dialog_height=600 +ui_last/import_dialog_paned_places_pos=150 +ui_last/import_dialog_paned_pos=210 +ui_last/import_dialog_show_home=true +ui_last/import_dialog_show_mounted=true +ui_last/import_dialog_show_pictures=true +ui_last/import_dialog_width=800 +ui_last/import_dialog_x=2203 +ui_last/import_dialog_y=830 +ui_last/import_ignore_nonraws=false +ui_last/import_initial_rating=1 +ui_last/import_jobcode=no_name +ui_last/import_keep_open=false +ui_last/import_last_PreservedFileName= +ui_last/import_last_creator= +ui_last/import_last_description= +ui_last/import_last_directory=/Users/arminhammer/Pictures +ui_last/import_last_folder_descending=false +ui_last/import_last_image=39 +ui_last/import_last_image_id= +ui_last/import_last_notes= +ui_last/import_last_place=/Users/arminhammer +ui_last/import_last_publisher= +ui_last/import_last_rights= +ui_last/import_last_root= +ui_last/import_last_tags= +ui_last/import_last_tags_imported=true +ui_last/import_last_title= +ui_last/import_last_version_name= +ui_last/import_recursive=false +ui_last/import_select_new=FALSE +ui_last/maximized=TRUE +ui_last/metadata_dialog_height=400 +ui_last/metadata_dialog_width=500 +ui_last/modulegroups_dialog_height=700 +ui_last/modulegroups_dialog_width=1100 +ui_last/panel_bottom=0 +ui_last/panel_left=-1 +ui_last/panel_right=-1 +ui_last/panel_top=0 +ui_last/preferences_dialog_height=720 +ui_last/preferences_dialog_width=1100 +ui_last/session_expander_import=false +ui_last/shortcuts_dialog_height=700 +ui_last/shortcuts_dialog_width=1100 +ui_last/styles_create_duplicate= +ui_last/styles_dialog_height=500 +ui_last/styles_dialog_width=1 +ui_last/styles_hide_preview= +ui_last/view=0 +ui_last/window_h=1327 +ui_last/window_w=2560 +ui_last/window_x=1440 +ui_last/window_y=585 +workspace/label= +write_sidecar_files=on import diff --git a/.cursor/debug-config-c53fb5/darktablerc-common b/.cursor/debug-config-c53fb5/darktablerc-common new file mode 100644 index 000000000000..a85ea1d6a423 --- /dev/null +++ b/.cursor/debug-config-c53fb5/darktablerc-common @@ -0,0 +1,9 @@ +database/multiple_workspace=false +font_size=12.000000 +themes/condensed=false +themes/usercss=false +ui/hide_tooltips=false +ui/show_welcome_screen=FALSE +ui_last/gui_language= +ui_last/theme=darktable-elegant-grey +use_system_font=false diff --git a/.cursor/debug-config-c53fb5/data.db b/.cursor/debug-config-c53fb5/data.db new file mode 100644 index 000000000000..e9dc6dbf52a8 Binary files /dev/null and b/.cursor/debug-config-c53fb5/data.db differ diff --git a/.cursor/debug-config-c53fb5/data.db-pre-5.5.0 b/.cursor/debug-config-c53fb5/data.db-pre-5.5.0 new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/.cursor/debug-config-c53fb5/data.db.lock b/.cursor/debug-config-c53fb5/data.db.lock new file mode 100644 index 000000000000..c6a04e29b922 Binary files /dev/null and b/.cursor/debug-config-c53fb5/data.db.lock differ diff --git a/.cursor/debug-config-c53fb5/shortcutsrc b/.cursor/debug-config-c53fb5/shortcutsrc new file mode 100644 index 000000000000..a62102d15a7c --- /dev/null +++ b/.cursor/debug-config-c53fb5/shortcutsrc @@ -0,0 +1,192 @@ +None;left=fallbacks/utility module +None;left;double=fallbacks/utility module;reset +None;right=fallbacks/utility module;presets +None;left=fallbacks/processing module;enable +None;left;long=fallbacks/processing module;focus +None;left;double=fallbacks/processing module;reset +None;right=fallbacks/processing module;presets +None;right;double=fallbacks/processing module;instance +None;shift=fallbacks/value;*10 +None;cmd=fallbacks/value;*0.1 +None;shift;cmd=fallbacks/value;*10 +None;horizontal=fallbacks/value;*0.1 +None;vertical=fallbacks/value;*10 +None;left;double=fallbacks/value;reset +None;vertical;left;double=fallbacks/value;top +None;cmd=fallbacks/toggle;ctrl-toggle +None;right=fallbacks/toggle;right-toggle +None;long=fallbacks/toggle;right-toggle +None;scroll=fallbacks/dropdown;*-1 +None;vertical=fallbacks/dropdown;*-1 +None;left=fallbacks/dropdown;button +None;cmd;left=fallbacks/dropdown;button;ctrl-toggle +None;left;double=fallbacks/dropdown;reset +None;shift;cmd=fallbacks/slider;force;*10 +None;left=fallbacks/slider;button +None;cmd;left=fallbacks/slider;button;ctrl-toggle +None;vertical;right=fallbacks/slider;zoom +None;cmd=fallbacks/button;ctrl-activate +None;right=fallbacks/button;right-activate +None;long=fallbacks/button;right-activate +None;shift=fallbacks/contrast equalizer;reset +None;cmd=fallbacks/contrast equalizer;bottom +None;shift=fallbacks/move;select +space=views/slideshow/start and stop +space=views/darkroom/image forward +comma;shift=views/darkroom/decrease brush opacity +minus=views/slideshow/speed up +minus;cmd=views/darkroom/zoom out +period;shift=views/darkroom/increase brush opacity +1;option=views/darkroom/zoom close-up +2;option=views/darkroom/zoom;item:fill +3;option=views/darkroom/zoom;item:fit +equal;shift=views/slideshow/slow down +equal;shift;cmd=views/darkroom/zoom in +bracketleft=iop/flip/rotate 90 degrees CCW +bracketleft;shift=views/darkroom/decrease brush hardness +bracketleft;option=iop/ashift/rotation;up +bracketright=iop/flip/rotate 90 degrees CW +bracketright;shift=views/darkroom/increase brush hardness +bracketright;option=iop/ashift/rotation;down +a=views/darkroom/force pan@. +*/ + +#include "common/duplicate_review.h" +#include "common/darktable.h" +#include "common/database.h" +#include "common/debug.h" +#include "common/datetime.h" +#include "common/image.h" +#include "common/ratings.h" + +#include +#include +#include + +/* Max time gap between consecutive shots in a burst (GTimeSpan / DB datetime_taken units). */ +#define DT_DUP_REVIEW_BURST_GAP (3LL * G_TIME_SPAN_SECOND) + +typedef struct dt_dup_review_row_t +{ + dt_imgid_t id; + dt_filmid_t film_id; + gint64 datetime_taken; + int flags; +} dt_dup_review_row_t; + +static int _star_rating(const int flags) +{ + if(flags & DT_IMAGE_REJECTED) return -1; + return flags & DT_VIEW_RATINGS_MASK; +} + +static gint64 _read_datetime_from_stmt(sqlite3_stmt *stmt, const int col) +{ + const int t = sqlite3_column_type(stmt, col); + if(t == SQLITE_INTEGER) + return sqlite3_column_int64(stmt, col); + if(t == SQLITE_TEXT) + { + const char *txt = (const char *)sqlite3_column_text(stmt, col); + if(txt && *txt) + return dt_datetime_exif_to_gtimespan(txt); + } + return 0; +} + +static int _cmp_row(const void *a, const void *b) +{ + const dt_dup_review_row_t *ra = a; + const dt_dup_review_row_t *rb = b; + if(ra->film_id != rb->film_id) + return (ra->film_id < rb->film_id) ? -1 : 1; + if(ra->datetime_taken != rb->datetime_taken) + return (ra->datetime_taken < rb->datetime_taken) ? -1 : 1; + if(ra->id != rb->id) + return (ra->id < rb->id) ? -1 : 1; + return 0; +} + +static dt_imgid_t _pick_keeper(dt_dup_review_row_t *rows, const int start, const int n) +{ + int max_rating = -1; + for(int i = start; i < start + n; i++) + { + const int r = _star_rating(rows[i].flags); + if(r > max_rating) max_rating = r; + } + if(max_rating < 0) return NO_IMGID; + + dt_imgid_t keeper = NO_IMGID; + gint64 best_dt = G_MAXINT64; + for(int i = start; i < start + n; i++) + { + const int r = _star_rating(rows[i].flags); + if(r != max_rating) continue; + const gint64 dt = rows[i].datetime_taken; + if(!dt_is_valid_imgid(keeper) || dt < best_dt + || (dt == best_dt && rows[i].id < keeper)) + { + keeper = rows[i].id; + best_dt = dt; + } + } + return keeper; +} + +void dt_duplicate_review_free_id_list(GList *list) +{ + g_list_free(list); +} + +GList *dt_duplicate_review_get_duplicate_ids(void) +{ + GList *list = NULL; + sqlite3_stmt *stmt = NULL; + // clang-format off + DT_DEBUG_SQLITE3_PREPARE_V2( + dt_database_get(darktable.db), + "SELECT mi.id" + " FROM main.images AS mi" + " JOIN memory.collected_images AS ci ON ci.imgid = mi.id" + " WHERE mi.version > (SELECT MIN(m2.version)" + " FROM main.images AS m2" + " WHERE m2.film_id = mi.film_id" + " AND m2.filename = mi.filename)", + -1, &stmt, NULL); + // clang-format on + if(stmt == NULL) return NULL; + + while(sqlite3_step(stmt) == SQLITE_ROW) + { + const dt_imgid_t id = sqlite3_column_int(stmt, 0); + list = g_list_prepend(list, GINT_TO_POINTER(id)); + } + sqlite3_finalize(stmt); + return g_list_reverse(list); +} + +GList *dt_duplicate_review_get_burst_candidate_ids(void) +{ + sqlite3_stmt *stmt = NULL; + // clang-format off + DT_DEBUG_SQLITE3_PREPARE_V2( + dt_database_get(darktable.db), + "SELECT mi.id, mi.film_id, mi.datetime_taken, mi.flags" + " FROM main.images AS mi" + " JOIN memory.collected_images AS ci ON ci.imgid = mi.id" + " WHERE mi.version = (SELECT MIN(m2.version)" + " FROM main.images AS m2" + " WHERE m2.film_id = mi.film_id" + " AND m2.filename = mi.filename)", + -1, &stmt, NULL); + // clang-format on + if(stmt == NULL) return NULL; + + int nalloc = 256; + int n = 0; + dt_dup_review_row_t *rows = malloc(sizeof(dt_dup_review_row_t) * (size_t)nalloc); + + while(sqlite3_step(stmt) == SQLITE_ROW) + { + if(n >= nalloc) + { + nalloc *= 2; + dt_dup_review_row_t *nr = realloc(rows, sizeof(dt_dup_review_row_t) * (size_t)nalloc); + if(!nr) + { + free(rows); + sqlite3_finalize(stmt); + return NULL; + } + rows = nr; + } + rows[n].id = sqlite3_column_int(stmt, 0); + rows[n].film_id = sqlite3_column_int(stmt, 1); + rows[n].datetime_taken = _read_datetime_from_stmt(stmt, 2); + rows[n].flags = sqlite3_column_int(stmt, 3); + n++; + } + sqlite3_finalize(stmt); + + if(n < 2) + { + free(rows); + return NULL; + } + + qsort(rows, (size_t)n, sizeof(dt_dup_review_row_t), _cmp_row); + + GList *candidates = NULL; + int i = 0; + while(i < n) + { + int j = i + 1; + while(j < n) + { + if(rows[j].film_id != rows[j - 1].film_id) break; + const gint64 dt_prev = rows[j - 1].datetime_taken; + const gint64 dt_curr = rows[j].datetime_taken; + if(dt_prev <= 0 || dt_curr <= 0) break; + if(dt_curr - dt_prev > DT_DUP_REVIEW_BURST_GAP) break; + j++; + } + const int cluster_size = j - i; + if(cluster_size >= 2) + { + const dt_imgid_t keeper = _pick_keeper(rows, i, cluster_size); + if(dt_is_valid_imgid(keeper)) + { + for(int k = i; k < j; k++) + { + if(rows[k].id == keeper) continue; + const int r = _star_rating(rows[k].flags); + if(r < 0) continue; + candidates = g_list_prepend(candidates, GINT_TO_POINTER(rows[k].id)); + } + } + } + i = j; + } + + free(rows); + return g_list_reverse(candidates); +} diff --git a/src/common/duplicate_review.h b/src/common/duplicate_review.h new file mode 100644 index 000000000000..b0152a59921c --- /dev/null +++ b/src/common/duplicate_review.h @@ -0,0 +1,39 @@ +/* + This file is part of darktable, + Copyright (C) 2026 darktable developers. + + 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 . +*/ + +#pragma once + +#include "common/darktable.h" +#include + +G_BEGIN_DECLS + +/** Library duplicates: same film roll + filename, non-minimum version rows. */ +GList *dt_duplicate_review_get_duplicate_ids(void); + +/** + * Burst / spam heuristic: consecutive shots in the same film roll with close + * capture time (only minimum-version rows per filename). Returns image ids + * suggested as redundant (not the keeper). + */ +GList *dt_duplicate_review_get_burst_candidate_ids(void); + +/** Free a list returned by the functions above (GList of imgid pointers). */ +void dt_duplicate_review_free_id_list(GList *list); + +G_END_DECLS diff --git a/src/gui/duplicate_review_dialog.c b/src/gui/duplicate_review_dialog.c new file mode 100644 index 000000000000..63a6f65d5b3d --- /dev/null +++ b/src/gui/duplicate_review_dialog.c @@ -0,0 +1,196 @@ +/* + This file is part of darktable, + Copyright (C) 2026 darktable developers. + + 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 . +*/ + +#include "gui/duplicate_review_dialog.h" +#include "common/act_on.h" +#include "common/collection.h" +#include "common/darktable.h" +#include "common/duplicate_review.h" +#include "common/ratings.h" +#include "common/selection.h" +#include "control/jobs/control_jobs.h" +#include "gui/gtk.h" +#include "views/view.h" +#ifdef GDK_WINDOWING_QUARTZ +#include "osx/osx.h" +#endif + +#include + +typedef struct dt_dup_review_dialog_t +{ + GtkWidget *dialog; + GtkWidget *dup_count_label; + GtkWidget *burst_count_label; + GList *duplicate_ids; + GList *burst_ids; +} dt_dup_review_dialog_t; + +static void _free_lists(dt_dup_review_dialog_t *d) +{ + dt_duplicate_review_free_id_list(d->duplicate_ids); + dt_duplicate_review_free_id_list(d->burst_ids); + d->duplicate_ids = NULL; + d->burst_ids = NULL; +} + +static void _rescan(dt_dup_review_dialog_t *d) +{ + _free_lists(d); + dt_collection_memory_update(); + d->duplicate_ids = dt_duplicate_review_get_duplicate_ids(); + d->burst_ids = dt_duplicate_review_get_burst_candidate_ids(); + + const guint n_dup = g_list_length(d->duplicate_ids); + const guint n_burst = g_list_length(d->burst_ids); + + gchar *dup_txt = g_strdup_printf(_("library duplicates (non-original versions): %u"), n_dup); + gchar *burst_txt = g_strdup_printf(_("burst / similar candidates (heuristic): %u"), n_burst); + gtk_label_set_text(GTK_LABEL(d->dup_count_label), dup_txt); + gtk_label_set_text(GTK_LABEL(d->burst_count_label), burst_txt); + g_free(dup_txt); + g_free(burst_txt); +} + +static void _rescan_clicked(GtkWidget *widget, gpointer user_data) +{ + _rescan((dt_dup_review_dialog_t *)user_data); +} + +static void _on_destroy(GtkWidget *widget, gpointer user_data) +{ + dt_dup_review_dialog_t *d = (dt_dup_review_dialog_t *)user_data; + _free_lists(d); + g_free(d); +} + +static void _select_duplicates(GtkWidget *widget, gpointer user_data) +{ + dt_dup_review_dialog_t *d = (dt_dup_review_dialog_t *)user_data; + if(!d->duplicate_ids) return; + GList *copy = g_list_copy(d->duplicate_ids); + dt_selection_clear(darktable.selection); + dt_selection_select_list(darktable.selection, copy); + g_list_free(copy); +} + +static void _select_burst(GtkWidget *widget, gpointer user_data) +{ + dt_dup_review_dialog_t *d = (dt_dup_review_dialog_t *)user_data; + if(!d->burst_ids) return; + GList *copy = g_list_copy(d->burst_ids); + dt_selection_clear(darktable.selection); + dt_selection_select_list(darktable.selection, copy); + g_list_free(copy); +} + +static void _reject_selected(GtkWidget *widget, gpointer user_data) +{ + GList *imgs = dt_act_on_get_images(TRUE, TRUE, FALSE); + if(!imgs) return; + dt_ratings_apply_on_list(imgs, DT_VIEW_REJECT, TRUE); + g_list_free(imgs); +} + +static void _delete_selected(GtkWidget *widget, gpointer user_data) +{ + dt_control_delete_images(); +} + +void dt_gui_duplicate_review_dialog_show(void) +{ + dt_dup_review_dialog_t *d = g_malloc0(sizeof(dt_dup_review_dialog_t)); + + GtkWindow *parent = GTK_WINDOW(dt_ui_main_window(darktable.gui->ui)); + GtkWidget *dlg = gtk_dialog_new_with_buttons( + _("duplicate review"), + parent, + GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_MODAL, + _("_close"), + GTK_RESPONSE_CLOSE, + NULL); + + d->dialog = dlg; + gtk_window_set_default_size(GTK_WINDOW(dlg), 480, 420); + +#ifdef GDK_WINDOWING_QUARTZ + dt_osx_disallow_fullscreen(dlg); +#endif + + GtkWidget *content = gtk_dialog_get_content_area(GTK_DIALOG(dlg)); + gtk_widget_set_margin_top(content, 10); + gtk_widget_set_margin_bottom(content, 10); + gtk_widget_set_margin_start(content, 10); + gtk_widget_set_margin_end(content, 10); + + GtkWidget *vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 8); + gtk_container_add(GTK_CONTAINER(content), vbox); + + GtkWidget *explain = gtk_label_new( + _("this tool finds duplicate library entries (same file, different edit versions) and " + "suggests burst shots that may be redundant.\n" + "similar-image detection is heuristic only; review before deleting.")); + gtk_label_set_line_wrap(GTK_LABEL(explain), TRUE); + gtk_label_set_xalign(GTK_LABEL(explain), 0.0); + gtk_box_pack_start(GTK_BOX(vbox), explain, FALSE, FALSE, 0); + + d->dup_count_label = gtk_label_new(""); + d->burst_count_label = gtk_label_new(""); + gtk_label_set_xalign(GTK_LABEL(d->dup_count_label), 0.0); + gtk_label_set_xalign(GTK_LABEL(d->burst_count_label), 0.0); + gtk_box_pack_start(GTK_BOX(vbox), d->dup_count_label, FALSE, FALSE, 0); + gtk_box_pack_start(GTK_BOX(vbox), d->burst_count_label, FALSE, FALSE, 0); + + GtkWidget *btn_grid = gtk_grid_new(); + gtk_grid_set_column_spacing(GTK_GRID(btn_grid), 8); + gtk_grid_set_row_spacing(GTK_GRID(btn_grid), 8); + gtk_box_pack_start(GTK_BOX(vbox), btn_grid, FALSE, FALSE, 0); + + GtkWidget *b1 = gtk_button_new_with_label(_("select duplicates (keep original)")); + gtk_widget_set_tooltip_text(b1, + _("select non-original duplicate versions in the current collection; " + "the lowest version per filename is kept unselected")); + g_signal_connect(b1, "clicked", G_CALLBACK(_select_duplicates), d); + gtk_grid_attach(GTK_GRID(btn_grid), b1, 0, 0, 1, 1); + + GtkWidget *b2 = gtk_button_new_with_label(_("select burst candidates")); + gtk_widget_set_tooltip_text( + b2, _("select images suggested as redundant burst shots (same roll, close time, unstarred)")); + g_signal_connect(b2, "clicked", G_CALLBACK(_select_burst), d); + gtk_grid_attach(GTK_GRID(btn_grid), b2, 1, 0, 1, 1); + + GtkWidget *b3 = gtk_button_new_with_label(_("rescan")); + g_signal_connect(b3, "clicked", G_CALLBACK(_rescan_clicked), d); + gtk_grid_attach(GTK_GRID(btn_grid), b3, 0, 1, 1, 1); + + GtkWidget *b4 = gtk_button_new_with_label(_("reject selected")); + g_signal_connect(b4, "clicked", G_CALLBACK(_reject_selected), d); + gtk_grid_attach(GTK_GRID(btn_grid), b4, 1, 1, 1, 1); + + GtkWidget *b5 = gtk_button_new_with_label(_("delete selected")); + g_signal_connect(b5, "clicked", G_CALLBACK(_delete_selected), d); + gtk_grid_attach(GTK_GRID(btn_grid), b5, 0, 2, 2, 1); + + g_signal_connect(dlg, "destroy", G_CALLBACK(_on_destroy), d); + + _rescan(d); + + gtk_widget_show_all(dlg); + gtk_dialog_run(GTK_DIALOG(dlg)); + gtk_widget_destroy(dlg); +} diff --git a/src/gui/duplicate_review_dialog.h b/src/gui/duplicate_review_dialog.h new file mode 100644 index 000000000000..3aeab6f27142 --- /dev/null +++ b/src/gui/duplicate_review_dialog.h @@ -0,0 +1,27 @@ +/* + This file is part of darktable, + Copyright (C) 2026 darktable developers. + + 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 . +*/ + +#pragma once + +#include + +G_BEGIN_DECLS + +void dt_gui_duplicate_review_dialog_show(void); + +G_END_DECLS diff --git a/src/libs/image.c b/src/libs/image.c index b48f95b12b2c..dab1e62ea7c8 100644 --- a/src/libs/image.c +++ b/src/libs/image.c @@ -33,6 +33,7 @@ #include "dtgtk/button.h" #include "dtgtk/paint.h" #include "gui/accelerators.h" +#include "gui/duplicate_review_dialog.h" #include "gui/gtk.h" #include "libs/lib.h" #include @@ -50,7 +51,7 @@ typedef struct dt_lib_image_t { GtkWidget *rotate_cw_button, *rotate_ccw_button, *remove_button; GtkWidget *delete_button, *create_hdr_button; - GtkWidget *duplicate_button, *reset_button, *move_button, *copy_button; + GtkWidget *duplicate_button, *duplicate_review_button, *reset_button, *move_button, *copy_button; GtkWidget *group_button, *ungroup_button, *cache_button, *uncache_button; GtkWidget *refresh_button, *set_monochrome_button, *set_color_button; GtkWidget *copy_metadata_button, *paste_metadata_button, *clear_metadata_button; @@ -155,6 +156,11 @@ static void _duplicate_virgin(dt_action_t *action) dt_control_duplicate_images(TRUE); } +static void _duplicate_review_clicked(GtkWidget *widget, gpointer user_data) +{ + dt_gui_duplicate_review_dialog_show(); +} + static void button_clicked(GtkWidget *widget, gpointer user_data) { const int i = GPOINTER_TO_INT(user_data); @@ -211,6 +217,9 @@ void gui_update(dt_lib_module_t *self) gtk_widget_set_sensitive(GTK_WIDGET(d->create_hdr_button), act_on_any); gtk_widget_set_sensitive(GTK_WIDGET(d->duplicate_button), act_on_any); + const uint32_t collection_cnt = dt_collection_get_count_no_group(darktable.collection); + gtk_widget_set_sensitive(GTK_WIDGET(d->duplicate_review_button), collection_cnt > 0); + gtk_widget_set_sensitive(GTK_WIDGET(d->rotate_ccw_button), act_on_any); gtk_widget_set_sensitive(GTK_WIDGET(d->rotate_cw_button), act_on_any); gtk_widget_set_sensitive(GTK_WIDGET(d->reset_button), act_on_any); @@ -545,6 +554,13 @@ void gui_init(dt_lib_module_t *self) GDK_KEY_d, GDK_CONTROL_MASK); gtk_grid_attach(grid, d->duplicate_button, 2, line++, 2, 1); + d->duplicate_review_button = dt_action_button_new( + self, N_("review duplicates..."), _duplicate_review_clicked, NULL, + _("find duplicate library entries and burst candidates in the current collection"), + 0, 0); + gtk_grid_attach(grid, d->duplicate_review_button, 0, line, 4, 1); + line++; + d->rotate_ccw_button = dtgtk_button_new(dtgtk_cairo_paint_refresh, CPF_NONE, NULL);; gtk_widget_set_name(d->rotate_ccw_button, "non-flat"); gtk_widget_set_tooltip_text(d->rotate_ccw_button,