   WebServer *server = wfb.getServer();
 
   uint8_t rgb[3];
-
-  if (server->args() < 3) {
-    wfb.getServer()->send(400, "application/json", "insufficient args");
-    return;
-  }
-
-  rgb[0] = server->arg("red").toInt();
-  rgb[1] = server->arg("green").toInt();
-  rgb[2] = server->arg("blue").toInt();
+  rgb[0] = server->hasArg("r") ? server->arg("r").toInt() : 0;
+  rgb[1] = server->hasArg("g") ? server->arg("g").toInt() : 0;
+  rgb[2] = server->hasArg("b") ? server->arg("b").toInt() : 0;
 
   DEBUG3_VALUE("/rgb r:", rgb[0]);
-  DEBUG3_VALUE("g:", rgb[1]);
-  DEBUG3_VALUELN("b:", rgb[2]);
+  DEBUG3_VALUE(" g:", rgb[1]);
+  DEBUG3_VALUELN(" b:", rgb[2]);
 
   byte output = manager.lookup_output_by_type(HMTL_OUTPUT_PIXELS);
   if (output != HMTL_NO_OUTPUT) {
     DEBUG4_VALUELN("/rgb output:", output);
     hmtl_set_output_rgb(outputs[output], objects[output], rgb);
+    hmtl_update_output(outputs[output], objects[output]);
   }
 
   DEBUG3_PRINTLN("/rgb done");

#endif

#if defined(ESP32)
void circularHandler() {
  WebServer *server = wfb.getServer();


    wfb.configureAccessPoint("HMTL_Module", "12345678");
    wfb.startup();

    wfb.addRESTEndpoint("/clear", clearHandler, "\"description\":\"clear all patterns\"");
    wfb.addRESTEndpoint("/rgb", rgbHandler,
                        "\"description\":\"set to a single color\",\"args\":[\"r\",\"g\",\"b\"]");
    wfb.addRESTEndpoint("/circular", circularHandler,
                        "\"description\":\"run circular pattern\",\"args\":[\"pattern\",\"length\",\"period\"]");
    wfb.addRESTEndpoint("/sparkle", sparkleHandler,
                        "\"description\":\"run sparkle pattern\",\"args\":[\"r\",\"g\",\"b\",\"threshold\",\"bg\",\"hum_min\",\"hue_max\",\"sat_min\",\"sat_max\",\"val_min\",\"val_max\"]");

    tcpSocket.init(config.address, HMTL_PORT);
    tcpSocket.initBuffer(wifi_data_buffer, WIFI_SEND_BUFFER_SIZE);
