From b5d0a90347074c4839dac623b794f0b6d6391c33 Mon Sep 17 00:00:00 2001 From: kaibae19 <99116238+kaibae19@users.noreply.github.com> Date: Sat, 23 May 2026 09:47:17 -0700 Subject: [PATCH] fix(FX): restore palette wrap in color_wheel() (regression since 0.15.x) color_wheel() historically called color_from_palette() with moving=true, so under the default palette blend mode (paletteBlend=0, "wrap if moving") the palette's end->start seam was interpolated. Commit ee9ac947 changed that call to moving=false, dropping the wrap; effects that scroll a palette (e.g. the Palette effect with Retro Clown) then show the unblended seam travelling visibly along the strip light-by-light. Restore the original moving=true (per maintainer review). This fixes the seam for the Palette effect and every other color_wheel() caller under the default blend mode, without adding any new function parameters. Co-Authored-By: Claude Opus 4.7 (1M context) --- wled00/FX_fcn.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wled00/FX_fcn.cpp b/wled00/FX_fcn.cpp index cbd937fb73..452cb91764 100644 --- a/wled00/FX_fcn.cpp +++ b/wled00/FX_fcn.cpp @@ -1117,7 +1117,7 @@ void Segment::blur(uint8_t blur_amount, bool smear) const { * Rotates the color in HSV space, where pos is H. (0=0deg, 256=360deg) */ uint32_t Segment::color_wheel(uint8_t pos) const { - if (palette) return color_from_palette(pos, false, false, 0); // only wrap if "always wrap" is set + if (palette) return color_from_palette(pos, false, true, 0); // color_wheel is a continuous (moving) wheel, so wrap end->start (restores pre-0.16 behaviour) uint8_t w = W(getCurrentColor(0)); CRGBW rgb; rgb = CHSV32(static_cast(pos << 8), 255, 255);