diff --git a/src/libs/neural_restore.c b/src/libs/neural_restore.c index 03432595113c..64559fc625f6 100644 --- a/src/libs/neural_restore.c +++ b/src/libs/neural_restore.c @@ -995,13 +995,17 @@ 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);