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,