diff --git a/src/web/html/setup.html b/src/web/html/setup.html
index a335f76f..4bb67b8f 100644
--- a/src/web/html/setup.html
+++ b/src/web/html/setup.html
@@ -363,6 +363,54 @@
                 [36, "VP (GPIO36)"],
                 [39, "VN (GPIO39)"]
             ];
+            var esp32s3pins = [
+                [255, "off / default"],
+                [0,  "GPIO0 (DONT USE - BOOT)"],
+                [1,  "GPIO1"],
+                [2,  "GPIO2"],
+                [3,  "GPIO3"],
+                [4,  "GPIO4"],
+                [5,  "GPIO5"],
+                [6,  "GPIO6"],
+                [7,  "GPIO7"],
+                [8,  "GPIO8"],
+                [9,  "GPIO9"],
+                [10, "GPIO10"],
+                [11, "GPIO11"],
+                [12, "GPIO12"],
+                [13, "GPIO13"],
+                [14, "GPIO14"],
+                [15, "GPIO15"],
+                [16, "GPIO16"],
+                [17, "GPIO17"],
+                [18, "GPIO18"],
+                [19, "GPIO19 (DONT USE - USB-)"],
+                [20, "GPIO20 (DONT USE - USB+)"],
+                [21, "GPIO21"],
+                [26, "GPIO26 (PSRAM - not available)"],
+                [27, "GPIO27 (FLASH - not available)"],
+                [28, "GPIO28 (FLASH - not available)"],
+                [29, "GPIO29 (FLASH - not available)"],
+                [30, "GPIO30 (FLASH - not available)"],
+                [31, "GPIO31 (FLASH - not available)"],
+                [32, "GPIO32 (FLASH - not available)"],
+                [33, "GPIO33 (not exposed on WROOM modules)"],
+                [34, "GPIO34 (not exposed on WROOM modules)"],
+                [35, "GPIO35"],
+                [36, "GPIO36"],
+                [37, "GPIO37"],
+                [38, "GPIO38"],
+                [39, "GPIO39"],
+                [40, "GPIO40"],
+                [41, "GPIO41"],
+                [42, "GPIO42"],
+                [43, "GPIO43"],
+                [44, "GPIO44"],
+                [45, "GPIO45 (DONT USE - STRAPPING PIN)"],
+                [46, "GPIO46 (DONT USE - STRAPPING PIN)"],
+                [47, "GPIO47"],
+                [48, "GPIO48"],
+            ];
 
             const re = /11[2,4,6]1.*/;
 
@@ -605,7 +653,7 @@
                 }
             }
 
-            function parsePinout(obj, type) {
+            function parsePinout(obj, type, system) {
                 var e = document.getElementById("pinout");
                 pins = [['cs', 'pinCs'], ['ce', 'pinCe'], ['irq', 'pinIrq'], ['led0', 'pinLed0'], ['led1', 'pinLed1']];
                 for(p of pins) {
@@ -613,7 +661,7 @@
                         ml("div", {class: "row mb-3"}, [
                             ml("div", {class: "col-12 col-sm-3 my-2"}, p[0].toUpperCase()),
                             ml("div", {class: "col-12 col-sm-9"},
-                                sel(p[1], ("ESP8266" == type) ? esp8266pins : esp32pins, obj[p[0]])
+                                sel(p[1], ("ESP8266" == type) ? esp8266pins : ("ESP32-S3" == system["chip_model"]) ? esp32s3pins : esp32pins, obj[p[0]])
                             )
                         ])
                     );
@@ -642,7 +690,7 @@
                 document.getElementsByName("serIntvl")[0].value = obj["interval"];
             }
 
-            function parseDisplay(obj, type) {
+            function parseDisplay(obj, type, system) {
                 for(var i of ["disp_pwr", "disp_pxshift"])
                     document.getElementsByName(i)[0].checked = obj[i];
 
@@ -720,7 +768,7 @@
                     parseMqtt(root["mqtt"]);
                     parseNtp(root["ntp"]);
                     parseSun(root["sun"]);
-                    parsePinout(root["pinout"], root["system"]["esp_type"]);
+                    parsePinout(root["pinout"], root["system"]["esp_type"], root["system"]);
                     parseRadio(root["radio"]);
                     parseSerial(root["serial"]);
                     parseDisplay(root["display"], root["system"]["esp_type"]);