diff --git a/main.py b/main.py
index 1959d4f87f2c0c3e87353a33503a29b1bae1fda3..35ce8a5851f93f8e4c1562d2750915735a98a65a 100644
--- a/main.py
+++ b/main.py
@@ -99,8 +99,16 @@ def wr_set_widget():
             "error": f"Widget {widget_name} is not available"
         }, 400)
 
+    config_override = request.json.get("config", {})
+    if type(config_override) is not dict:
+        return json_response({
+            "error": "Config must be an Object"
+        }, 400)
+
+    config_b64 = base64.b64encode(json.dumps(config_override).encode("utf-8")).decode("utf-8")
+
     # Send the pattern to the LED thread
-    display_queue.put("SET_WIDGET:" + widget_name)
+    display_queue.put("SET_WIDGET:" + widget_name + ":" + config_b64)
 
     # Return success
     return json_response({
@@ -127,8 +135,16 @@ def wr_set_pattern():
             "error": f"Pattern {pattern_name} is not available"
         }, 400)
 
+    config_override = request.json.get("config", {})
+    if type(config_override) is not dict:
+        return json_response({
+            "error": "Config must be an Object"
+        }, 400)
+
+    config_b64 = base64.b64encode(json.dumps(config_override).encode("utf-8")).decode("utf-8")
+
     # Send the pattern to the LED thread
-    led_queue.put("SET_PATTERN:" + pattern_name)
+    led_queue.put("SET_PATTERN:" + pattern_name + ":" + config_b64)
 
     # Return success
     return json_response({
@@ -140,10 +156,13 @@ def wr_set_pattern():
 def wr_get_config():
     return json_response(module_config)
 
-def load_widget(widget_name: str):
+def load_widget(widget_name: str, config_override: dict=None):
     # Get the widget properties from the config file
     widget_props = module_config.get(widget_name, {}).copy()
 
+    if config_override is not None:
+        widget_props.update(config_override)
+
     # Scale the properties that are supposed to be scalable
     for k, v in widget_props.copy().items():
         if (isinstance(v, int) or isinstance(v, float)) and k.startswith("scalable_"):
@@ -155,8 +174,12 @@ def load_widget(widget_name: str):
     # Load the widget
     return getattr(screenwidgets, widget_name)(widget_props)
 
-def load_pattern(pattern_name: str, leds: ILedString):
+def load_pattern(pattern_name: str, leds: ILedString, config_override: dict=None):
     pattern_props = module_config.get(pattern_name, {}).copy()
+
+    if config_override is not None:
+        pattern_props.update(config_override)
+
     return getattr(ledpatterns, pattern_name)(pattern_props, leds)
 
 def run_screen():
@@ -191,10 +214,17 @@ def run_screen():
         # Check for messages
         try:
             message = display_queue.get_nowait()
-            if message.startswith("SET_WIDGET:"):
-                widget_to_load = message.removeprefix("SET_WIDGET:")
+            parts = message.split(":")
+            if parts[0] == "SET_WIDGET":
+                widget_to_load = parts[1]
                 if widget_to_load in PROP_AVAILABLE_WIDGETS: # Check input validity
-                    current_widget = load_widget(widget_to_load)
+                    config_override = {}
+                    if len(parts) == 3:
+                        try:
+                            config_override = json.loads(base64.b64decode(parts[2]).decode("utf-8"))
+                        except json.JSONDecodeError:
+                            pass
+                    current_widget = load_widget(widget_to_load, config_override)
         except queue.Empty:
             pass
 
@@ -228,10 +258,17 @@ def run_leds():
     while True:
         try:
             message = led_queue.get_nowait()
-            if message.startswith("SET_PATTERN:"):
-                pattern_name = message.removeprefix("SET_PATTERN:")
+            parts = message.split(":")
+            if parts[0] == "SET_PATTERN":
+                pattern_name = parts[1]
                 if pattern_name in PROP_AVAILABLE_PATTERNS:
-                    current_pattern = load_pattern(pattern_name, leds)
+                    config_override = {}
+                    if len(parts) == 3:
+                        try:
+                            config_override = json.loads(base64.b64decode(parts[2]).decode("utf-8"))
+                        except json.JSONDecodeError:
+                            pass
+                    current_pattern = load_pattern(pattern_name, leds, config_override)
                     pattern_timer = module_config.get(pattern_name, {}).get("tick_rate", -1)
                     current_pattern.tick()
             elif message == "EXIT":