From ee93f1fc170e3f19eb030ccf5a5e906266e7ee47 Mon Sep 17 00:00:00 2001 From: Jeff Cooper Date: Fri, 19 Jun 2026 19:43:12 -0400 Subject: [PATCH 1/2] Fix grouping logic when input image is not the group leader --- src/libs/neural_restore.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/libs/neural_restore.c b/src/libs/neural_restore.c index 03432595113c..7a538b4a894d 100644 --- a/src/libs/neural_restore.c +++ b/src/libs/neural_restore.c @@ -995,13 +995,15 @@ static void _import_image(const char *filename, dt_print(DT_DEBUG_AI, "[neural_restore] imported imgid=%d: %s", newid, filename); if(dt_is_valid_imgid(source_imgid)) { - dt_grouping_add_to_group(source_imgid, newid); + const dt_image_t *src = dt_image_cache_get(source_imgid, 'r'); + // get source image group ID; fallback to source_imgid if cache miss to avoid invalid 0 (NO_IMGID) group ID + const dt_imgid_t grpid = (src && dt_is_valid_imgid(src->group_id)) ? src->group_id : source_imgid; + dt_image_cache_read_release(src); + dt_grouping_add_to_group(grpid, newid); // promote the output as group leader, but only when the source // was the current leader — preserves any manually-set leader the // user deliberately chose - const dt_image_t *src = dt_image_cache_get(source_imgid, 'r'); - const gboolean source_is_leader = src && src->group_id == source_imgid; - dt_image_cache_read_release(src); + const gboolean source_is_leader = (grpid == source_imgid); if(source_is_leader) dt_grouping_change_representative(newid); From 6352c3dad2de170f8464939a361146909b96e94e Mon Sep 17 00:00:00 2001 From: Jeff Cooper Date: Sat, 20 Jun 2026 11:52:02 -0400 Subject: [PATCH 2/2] fix style --- src/libs/neural_restore.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/libs/neural_restore.c b/src/libs/neural_restore.c index 7a538b4a894d..64559fc625f6 100644 --- a/src/libs/neural_restore.c +++ b/src/libs/neural_restore.c @@ -996,8 +996,10 @@ static void _import_image(const char *filename, if(dt_is_valid_imgid(source_imgid)) { const dt_image_t *src = dt_image_cache_get(source_imgid, 'r'); - // get source image group ID; fallback to source_imgid if cache miss to avoid invalid 0 (NO_IMGID) group ID - const dt_imgid_t grpid = (src && dt_is_valid_imgid(src->group_id)) ? src->group_id : source_imgid; + // get source image group ID; fallback to source_imgid if cache miss to + // avoid invalid 0 (NO_IMGID) group ID + const dt_imgid_t grpid = (src && dt_is_valid_imgid(src->group_id)) ? + src->group_id : source_imgid; dt_image_cache_read_release(src); dt_grouping_add_to_group(grpid, newid); // promote the output as group leader, but only when the source