Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
e1ab488
Add neural restore lighttable module for AI denoise and upscale
andriiryzhkov Mar 14, 2026
0184ba0
Add output parameters, ICC profile, EXIF, and variable-based output p…
andriiryzhkov Mar 15, 2026
8164921
Extract AI restore processing to src/ai/restore with reusable API
andriiryzhkov Mar 15, 2026
51041b0
Move restore to src/common/ai and compile in main library to fix Wind…
andriiryzhkov Mar 16, 2026
9bb483e
Preserve wide-gamut colors in AI denoise/upscale pipeline
andriiryzhkov Mar 20, 2026
5ad8ce4
Fix enum redeclaration error by removing comments
andriiryzhkov Mar 21, 2026
7870796
Allow concurrent AI jobs, block only per-image duplicates
andriiryzhkov Mar 21, 2026
5205db7
Reuse AI model across jobs with ref-counted restore context
andriiryzhkov Mar 21, 2026
a42cfe3
Move neural restore module down
andriiryzhkov Mar 21, 2026
156f928
Simplify wide-gamut preservation to direct gamma pass-through
andriiryzhkov Mar 21, 2026
04a573d
Add resizable preview with 100% zoom floor and configurable patch size
andriiryzhkov Mar 26, 2026
03c6d44
Fix split divider drift when preview is cropped at 100% zoom
andriiryzhkov Mar 26, 2026
70d0103
Add preview area picker for darkroom image click positioning
andriiryzhkov Mar 27, 2026
0e3c36c
Reuse tiled processing from batch path for preview inference
andriiryzhkov Mar 27, 2026
d1cbfd6
Use DT layout API for action row in neural restore
andriiryzhkov Mar 27, 2026
2b4a87d
Fix preview auto-generating on startup from notebook page restore
andriiryzhkov Mar 27, 2026
025304a
Add tile size fallback on inference failure for GPU OOM recovery
andriiryzhkov Mar 28, 2026
4416b1b
Add thread-safe model sharing and preview tile size cap for GPU OOM fix
andriiryzhkov Mar 28, 2026
d9cff18
Use widget dimensions for 1:1 preview pixel mapping
andriiryzhkov Mar 29, 2026
1854070
Fix detail recovery slider reset when switching notebook tabs
andriiryzhkov Mar 29, 2026
78aefb1
Replace darkroom picker with in-widget area selector
andriiryzhkov Mar 29, 2026
8038943
Fix module reset not clearing preview request state
andriiryzhkov Mar 29, 2026
52e85fa
Clamp preview crop to export dimensions
andriiryzhkov Mar 30, 2026
de45684
Add neural restore module to release notes
andriiryzhkov Mar 30, 2026
2ae439f
Fix memory leak and use size_t for pixel count calculations
andriiryzhkov Mar 30, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions RELEASE_NOTES.md
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,16 @@ changes (where available).
MIGraphX, DirectML, or OpenVINO), and the lightweight decoder
produces masks interactively.

- Added neural restore module in the lighttable/darkroom sidebar for
AI-based image denoise and upscale. Supports NIND UNet denoiser and
BSRGAN 2x/4x super-resolution models via the ONNX backend. Features
include an interactive before/after split preview with area picker,
a detail recovery slider (wavelet-based texture restoration for
denoise), batch processing with tiled inference, and TIFF output
with automatic library import and image grouping. GPU acceleration
is supported through CUDA, ROCm/MIGraphX, DirectML, OpenVINO, and
CoreML execution providers.

- Added `colorharmonizer` module that applies color harmony
corrections in UCS color space, rotating hues toward a target
harmony structure (complementary, split-complementary, triadic,
Expand Down
16 changes: 16 additions & 0 deletions data/ai_models.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,22 @@
"min_version": "1.0",
"github_asset": "mask-object-segnext-b2hq.dtmodel",
"default": false
},
{
"id": "denoise-nind",
"name": "denoise nind",
"description": "UNet denoiser trained on NIND dataset",
"task": "denoise",
"github_asset": "denoise-nind.dtmodel",
"default": true
},
{
"id": "upscale-bsrgan",
"name": "upscale bsrgan",
"description": "BSRGAN 2x and 4x blind super-resolution",
"task": "upscale",
"github_asset": "upscale-bsrgan.dtmodel",
"default": true
}
]
}
7 changes: 7 additions & 0 deletions data/darktableconfig.xml.in
Original file line number Diff line number Diff line change
Expand Up @@ -3752,6 +3752,13 @@
<shortdescription>raster mask files root folder</shortdescription>
<longdescription>this folder (and sub-folders) contains PFM/PNG files used by the raster mask import module. (restart required)</longdescription>
</dtconfig>
<dtconfig>
<name>plugins/lighttable/neural_restore/preview_height</name>
<type min="100" max="800">int</type>
<default>200</default>
<shortdescription/>
<longdescription/>
</dtconfig>
<dtconfig prefs="processing" section="general">
<name>plugins/darkroom/workflow</name>
<type>
Expand Down
1 change: 1 addition & 0 deletions src/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -462,6 +462,7 @@ if(USE_AI)
FILE(GLOB SOURCE_FILES_AI
"common/ai_models.c"
"common/ai/segmentation.c"
"common/ai/restore.c"
"develop/masks/object.c"
"gui/preferences_ai.c"
)
Expand Down
3 changes: 3 additions & 0 deletions src/ai/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ pkg_check_modules(JSON_GLIB REQUIRED json-glib-1.0)
# GTK3/RSVG needed for headers only (common/darktable.h -> utility.h -> gtk/gtk.h, librsvg/rsvg.h)
pkg_check_modules(GTK3 REQUIRED gtk+-3.0)
pkg_check_modules(RSVG2 REQUIRED librsvg-2.0)
# lcms2 needed for headers (common/colorspaces.h included via darktable.h)
pkg_check_modules(LCMS2 REQUIRED lcms2)

# Include current directory for header
target_include_directories(darktable_ai PUBLIC
Expand All @@ -26,6 +28,7 @@ target_include_directories(darktable_ai PUBLIC
${JSON_GLIB_INCLUDE_DIRS}
${GTK3_INCLUDE_DIRS}
${RSVG2_INCLUDE_DIRS}
${LCMS2_INCLUDE_DIRS}
)

target_link_directories(darktable_ai PUBLIC
Expand Down
Loading
Loading