diff --git a/src/shaders/colorspace.c b/src/shaders/colorspace.c
index 31bf6e2baac04ca3539b5d01b064a0966e0833b2..c623187d2a625601364ea678ebe232cd6dc923d8 100644
--- a/src/shaders/colorspace.c
+++ b/src/shaders/colorspace.c
@@ -1133,9 +1133,10 @@ static void update_peak_buf(pl_gpu gpu, struct sh_color_map_obj *obj, bool force
         return;
     }
 
-    uint64_t frame_sum_pq = 0u, frame_wg_active = 0u;
+    uint64_t frame_sum_pq = 0u, frame_wg_count = 0u, frame_wg_active = 0u;
     for (int k = 0; k < SLICES; k++) {
         frame_sum_pq    += data.frame_sum_pq[k];
+        frame_wg_count  += data.frame_wg_count[k];
         frame_wg_active += data.frame_wg_active[k];
     }
     float avg_pq, max_pq;
@@ -1170,7 +1171,8 @@ static void update_peak_buf(pl_gpu gpu, struct sh_color_map_obj *obj, bool force
         const float log10_pq = 1e-2f; // experimentally determined approximate
         const float thresh_low = params->scene_threshold_low * log10_pq;
         const float thresh_high = params->scene_threshold_high * log10_pq;
-        const float delta = fabsf(avg_pq - obj->peak.avg_pq);
+        const float bias = (float) frame_wg_active / frame_wg_count;
+        const float delta = bias * fabsf(avg_pq - obj->peak.avg_pq);
         const float mix_coeff = pl_smoothstep(thresh_low, thresh_high, delta);
         obj->peak.avg_pq = PL_MIX(obj->peak.avg_pq, avg_pq, mix_coeff);
         obj->peak.max_pq = PL_MIX(obj->peak.max_pq, max_pq, mix_coeff);