diff --git a/components/micropython/usermodule/mp_leds.c b/components/micropython/usermodule/mp_leds.c
index bad16865a1af0fcf90a6c21ba424f8ca4cb1386e..68880e7f5672152a54842f5c62623e54b1f5b371 100644
--- a/components/micropython/usermodule/mp_leds.c
+++ b/components/micropython/usermodule/mp_leds.c
@@ -60,9 +60,10 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_0(mp_leds_get_slew_rate_obj,
 
 STATIC mp_obj_t mp_led_set_rgb(size_t n_args, const mp_obj_t *args) {
     uint8_t index = mp_obj_get_int(args[0]);
-    uint8_t red = mp_obj_get_int(args[1]);
-    uint8_t green = mp_obj_get_int(args[2]);
-    uint8_t blue = mp_obj_get_int(args[3]);
+    float red = mp_obj_get_float(args[1]);
+    float green = mp_obj_get_float(args[2]);
+    float blue = mp_obj_get_float(args[3]);
+
     st3m_leds_set_single_rgb(index, red, green, blue);
     return mp_const_none;
 }
@@ -81,9 +82,9 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mp_led_set_hsv_obj, 4, 4,
                                            mp_led_set_hsv);
 
 STATIC mp_obj_t mp_led_set_all_rgb(mp_obj_t r, mp_obj_t g, mp_obj_t b) {
-    uint8_t red = mp_obj_get_int(r);
-    uint8_t green = mp_obj_get_int(g);
-    uint8_t blue = mp_obj_get_int(b);
+    float red = mp_obj_get_float(r);
+    float green = mp_obj_get_float(g);
+    float blue = mp_obj_get_float(b);
     st3m_leds_set_all_rgb(red, green, blue);
     return mp_const_none;
 }
diff --git a/components/st3m/st3m_leds.c b/components/st3m/st3m_leds.c
index 6b77164d152b50b1fc780826ea147838572a1bb2..b55ed3bf015480d902bbf5630891f159e4eadf39 100644
--- a/components/st3m/st3m_leds.c
+++ b/components/st3m/st3m_leds.c
@@ -105,12 +105,17 @@ void st3m_leds_update_hardware() {
     }
 }
 
-void st3m_leds_set_single_rgb(uint8_t index, uint8_t red, uint8_t green,
-                              uint8_t blue) {
+void st3m_leds_set_single_rgb(uint8_t index, float red, float green,
+                              float blue) {
+
+    if (red > 1.0) red /= 255.0;
+    if (green > 1.0) green /= 255.0;
+    if (blue > 1.0) blue /= 255.0;
+
     LOCK_INCOMING;
-    state.target_buffer[index].r = red;
-    state.target_buffer[index].g = green;
-    state.target_buffer[index].b = blue;
+    state.target_buffer[index].r = (uint8_t) (red * 255);
+    state.target_buffer[index].g = (uint8_t) (green * 255);
+    state.target_buffer[index].b = (uint8_t) (blue * 255);
     UNLOCK_INCOMING;
 }
 
@@ -125,7 +130,7 @@ void st3m_leds_set_single_hsv(uint8_t index, float hue, float sat, float val) {
     UNLOCK_INCOMING;
 }
 
-void st3m_leds_set_all_rgb(uint8_t red, uint8_t green, uint8_t blue) {
+void st3m_leds_set_all_rgb(float red, float green, float blue) {
     for (int i = 0; i < 40; i++) {
         st3m_leds_set_single_rgb(i, red, green, blue);
     }
diff --git a/components/st3m/st3m_leds.h b/components/st3m/st3m_leds.h
index 3f844d7ef47b6247e8e765fda0b83fa3148394b4..10b817f5a4c430b7af9d9373dff798504c29b037 100644
--- a/components/st3m/st3m_leds.h
+++ b/components/st3m/st3m_leds.h
@@ -23,10 +23,10 @@ void st3m_leds_init();
 //
 // After you're ready setting up your blink, call st3m_leds_update, or enable
 // autoupdates.
-void st3m_leds_set_single_rgb(uint8_t index, uint8_t red, uint8_t green,
-                              uint8_t blue);
+void st3m_leds_set_single_rgb(uint8_t index, float red, float green,
+                              float blue);
 void st3m_leds_set_single_hsv(uint8_t index, float hue, float sat, float value);
-void st3m_leds_set_all_rgb(uint8_t red, uint8_t green, uint8_t blue);
+void st3m_leds_set_all_rgb(float red, float green, float blue);
 void st3m_leds_set_all_hsv(float hue, float sat, float value);
 
 // Set/get global LED brightness, 0-255. Default 69.
diff --git a/python_payload/mypystubs/leds.pyi b/python_payload/mypystubs/leds.pyi
index 0a1151af2964dc46aabbaa6ad2006a1e5ff162eb..c6febb771e4226117614986335bc0310a1731dd7 100644
--- a/python_payload/mypystubs/leds.pyi
+++ b/python_payload/mypystubs/leds.pyi
@@ -8,13 +8,13 @@ There are 8 LEDs per top petal, or 4 LEDs per petal.
 After you're ready setting up your blink, call update(), or enable autoupdates.
 """
 
-def set_rgb(ix: int, r: int, g: int, b: int) -> None:
+def set_rgb(ix: int, r: float, g: float, b: float) -> None:
     """Set LED `ix` to rgb value r, g, b
 
     :param ix: LED index, from 0 to 39
-    :param r: Red value, from 0 to 255
-    :param g: Green value, from 0 to 255
-    :param b: Blue value, from 0 to 255
+    :param r: Red value, from 0.0 to 1.0
+    :param g: Green value, from 0.0 to 1.0
+    :param b: Blue value, from 0.0 to 1.0
     """
 
 def set_hsv(ix: int, hue: float, sat: float, val: float) -> None:
@@ -26,12 +26,12 @@ def set_hsv(ix: int, hue: float, sat: float, val: float) -> None:
     :param val: Value, from 0.0 to 1.0
     """
 
-def set_all_rgb(r: int, g: int, b: int) -> None:
+def set_all_rgb(r: float, g: float, b: float) -> None:
     """Set all LEDs to rgb value r, g, b
 
-    :param r: Red value, from 0 to 255
-    :param g: Green value, from 0 to 255
-    :param b: Blue value, from 0 to 255
+    :param r: Red value, from 0.0 to 1.0
+    :param g: Green value, from 0.0 to 1.0
+    :param b: Blue value, from 0.0 to 1.0
     """
 
 def set_all_hsv(h: float, s: float, v: float) -> None: