{"product_id":"node-flex-led-controller","title":"Node Flex LED Controller","description":"\u003c!-- ============================================================\n     Wateefy · NODE Flex — Shopify Product Description\n     Rev 1  ·  2026-08-02\n     Self-contained, scoped under .wtf-flex. Paste into a custom\n     Liquid\/HTML section (recommended) or product description.\n     ============================================================ --\u003e\n\u003cp\u003e\u003clink rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\"\u003e \u003clink rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin=\"\"\u003e \u003clink href=\"https:\/\/fonts.googleapis.com\/css2?family=Space+Grotesk:wght@400;500;600;700\u0026amp;family=IBM+Plex+Mono:wght@400;500;600\u0026amp;family=Inter:wght@400;500\u0026amp;display=swap\" rel=\"stylesheet\"\u003e\u003c\/p\u003e\n\u003cstyle\u003e\n    .wtf-flex{\n      --board:#0b1a2b; --panel:#10233a; --panel2:#0e1f34;\n      --silk:#e9eef5; --silk-dim:#7f97b0; --gold:#cda349;\n      --gold-dim:rgba(205,163,73,.22); --led:#ff7d2e;\n      --f-disp:'Space Grotesk',system-ui,sans-serif;\n      --f-mono:'IBM Plex Mono',ui-monospace,monospace;\n      --f-body:'Inter',system-ui,sans-serif;\n      background:var(--board); color:var(--silk); font-family:var(--f-body);\n      line-height:1.62; padding:clamp(28px,5vw,64px); border-radius:4px;\n      max-width:1080px; margin:0 auto;\n    }\n    .wtf-flex *{ box-sizing:border-box; }\n    .wtf-flex .eyebrow{ font-family:var(--f-mono); font-size:.72rem; letter-spacing:.28em; text-transform:uppercase; color:var(--gold); margin:0 0 16px; }\n    .wtf-flex h1{ font-family:var(--f-disp); font-weight:700; font-size:clamp(2.4rem,7vw,4rem); line-height:.98; letter-spacing:-.02em; margin:0; }\n    .wtf-flex h1 b{ color:var(--gold); }\n    .wtf-flex .sub{ font-family:var(--f-mono); font-size:.82rem; letter-spacing:.06em; color:var(--silk-dim); margin:12px 0 0; }\n    .wtf-flex .hero-line{ font-family:var(--f-disp); font-weight:500; font-size:clamp(1.15rem,3vw,1.55rem); color:var(--silk); margin:24px 0 0; max-width:32ch; }\n    .wtf-flex .hero-line::after{ content:\"\"; display:block; width:64px; height:2px; background:var(--led); margin-top:18px; box-shadow:0 0 12px var(--led); }\n    .wtf-flex .sec-label{ font-family:var(--f-mono); font-size:.72rem; letter-spacing:.22em; text-transform:uppercase; color:var(--gold); margin:52px 0 18px; display:flex; align-items:center; gap:14px; }\n    .wtf-flex .sec-label::after{ content:\"\"; height:1px; flex:1; background:var(--gold-dim); }\n    .wtf-flex .glance{ list-style:none; padding:0; margin:0; display:grid; grid-template-columns:1fr 1fr; gap:1px; background:var(--gold-dim); border:1px solid var(--gold-dim); border-radius:4px; overflow:hidden; }\n    .wtf-flex .glance li{ background:var(--panel); padding:16px 18px; font-size:.92rem; color:#b6c4d4; }\n    .wtf-flex .glance li b{ display:block; color:var(--silk); font-weight:600; font-family:var(--f-disp); font-size:1rem; margin-bottom:2px; }\n    .wtf-flex .glance li.blank::before{ content:none; }\n    .wtf-flex .glance li::before{ content:\"+\"; color:var(--gold); font-family:var(--f-mono); font-weight:600; margin-right:8px; }\n    .wtf-flex .fuse-spec{ font-family:var(--f-mono); font-size:.8rem; letter-spacing:.03em; color:var(--silk-dim); margin:16px 0 0; border-left:2px solid var(--led); padding-left:12px; }\n    .wtf-flex .fuse-spec b{ color:var(--silk); font-weight:500; }\n    .wtf-flex .lead-claim{ font-family:var(--f-disp); font-weight:600; font-size:clamp(1.3rem,3.4vw,1.8rem); color:var(--silk); margin:0 0 16px; letter-spacing:-.01em; }\n    .wtf-flex p.body{ font-size:1rem; color:#c3d0de; max-width:64ch; margin:0 0 18px; }\n    .wtf-flex p.body strong{ color:var(--silk); font-weight:600; }\n    .wtf-flex p.body em{ color:var(--gold); font-style:italic; }\n    .wtf-flex .domains{ display:grid; gap:1px; background:var(--gold-dim); border:1px solid var(--gold-dim); border-radius:4px; overflow:hidden; margin:6px 0 0; }\n    .wtf-flex .domain{ background:var(--panel); padding:22px clamp(18px,3vw,28px); display:grid; grid-template-columns:auto 1fr; gap:20px; align-items:start; }\n    .wtf-flex .domain .num{ font-family:var(--f-mono); font-weight:600; font-size:clamp(1.6rem,4vw,2.2rem); color:var(--gold); line-height:1; letter-spacing:-.02em; opacity:.9; }\n    .wtf-flex .domain h3{ font-family:var(--f-disp); font-weight:700; font-size:1.15rem; margin:0 0 6px; }\n    .wtf-flex .domain p{ margin:0; font-size:.94rem; color:#b6c4d4; max-width:62ch; }\n    .wtf-flex .domain .redled{ color:#ff5a4d; font-weight:600; }\n    .wtf-flex .beefcake{ margin:1px 0 0; border:1px solid var(--gold-dim); border-radius:4px; background:radial-gradient(120% 180% at 8% 0%,rgba(255,125,46,.14),transparent 55%),var(--panel2); padding:clamp(24px,4vw,34px); }\n    .wtf-flex .beefcake .word{ font-family:var(--f-disp); font-weight:700; font-size:clamp(2rem,7vw,3.4rem); letter-spacing:.02em; color:var(--led); margin:0; line-height:1; text-shadow:0 0 24px rgba(255,125,46,.45); }\n    .wtf-flex .beefcake p{ font-family:var(--f-mono); font-size:.92rem; color:var(--silk); margin:14px 0 0; max-width:52ch; }\n    .wtf-flex .rtb{ margin-top:34px; }\n    .wtf-flex .rtb h4{ font-family:var(--f-disp); font-weight:600; font-size:1.1rem; color:var(--silk); margin:0 0 8px; }\n    .wtf-flex .stat-head{ font-family:var(--f-disp); font-weight:700; font-size:clamp(1.3rem,3.6vw,1.9rem); color:var(--silk); margin:38px 0 4px; letter-spacing:-.01em; }\n    .wtf-flex .stat-head b{ color:var(--gold); }\n    .wtf-flex .stats{ display:grid; grid-template-columns:repeat(3,1fr); gap:1px; background:var(--gold-dim); border:1px solid var(--gold-dim); border-radius:4px; overflow:hidden; margin:20px 0 0; }\n    .wtf-flex .stat{ background:var(--panel); padding:20px 16px; text-align:center; }\n    .wtf-flex .stat .n{ font-family:var(--f-mono); font-weight:600; font-size:clamp(1.8rem,5vw,2.6rem); color:var(--gold); line-height:1; }\n    .wtf-flex .stat .l{ font-family:var(--f-mono); font-size:.68rem; letter-spacing:.08em; text-transform:uppercase; color:var(--silk-dim); margin-top:8px; }\n    .wtf-flex .believe{ font-size:1rem; color:#c3d0de; margin:20px 0 0; max-width:64ch; }\n    .wtf-flex .believe strong{ color:var(--silk); font-weight:600; }\n    @media (max-width:620px){ .wtf-flex .glance{ grid-template-columns:1fr; } .wtf-flex .stats{ grid-template-columns:1fr; } }\n    @media (prefers-reduced-motion:reduce){ .wtf-flex *{ transition:none; } }\n  \u003c\/style\u003e\n\u003cdiv class=\"wtf-flex\"\u003e\n\u003cp class=\"eyebrow\"\u003eWateefy Electronics · NODE Flex\u003c\/p\u003e\n\u003ch1\u003eNODE \u003cb\u003eFlex\u003c\/b\u003e\n\u003c\/h1\u003e\n\u003cp class=\"sub\"\u003e8-Channel Addressable LED Controller · Universal Module Carrier\u003c\/p\u003e\n\u003cp class=\"hero-line\"\u003eOne board. Whatever module is in the drawer.\u003c\/p\u003e\n\u003cp class=\"sec-label\"\u003eAt a Glance\u003c\/p\u003e\n\u003cul class=\"glance\"\u003e\n\u003cli\u003e\n\u003cb\u003e8 independent output channels\u003c\/b\u003eWS281x \/ SK6812 \/ TM1814 family, 5 V level-shifted drive\u003c\/li\u003e\n\u003cli\u003e\n\u003cb\u003eAny ESP32 DevKit, 0.9″ or 1.0″ spacing\u003c\/b\u003eboth spacings on the board, up to 22 positions per row, jumper-mapped to the outputs\u003c\/li\u003e\n\u003cli\u003e\n\u003cb\u003e5–48 VDC input, no voltage jumper\u003c\/b\u003enothing to set wrong, ever\u003c\/li\u003e\n\u003cli\u003e\n\u003cb\u003e30 A through the board at standard copper\u003c\/b\u003enot a paid upgrade\u003c\/li\u003e\n\u003cli\u003e\n\u003cb\u003eThree isolated power domains\u003c\/b\u003edirty input, clean protected power, fused distribution bus\u003c\/li\u003e\n\u003cli\u003e\n\u003cb\u003eA fuse on every single output\u003c\/b\u003eeight channels, eight fuses, no sharing\u003c\/li\u003e\n\u003cli\u003e\n\u003cb\u003eNon-destructive reverse-polarity protection\u003c\/b\u003enothing is consumed when someone wires it backwards\u003c\/li\u003e\n\u003cli class=\"blank\"\u003e\n\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp class=\"fuse-spec\"\u003e\u003cb\u003eFuses\u003c\/b\u003e — up to 30 A max input · 7.5 A nominal \/ 10 A max per output\u003c\/p\u003e\n\u003cp class=\"sec-label\"\u003eWhy This Exists\u003c\/p\u003e\n\u003cp class=\"lead-claim\"\u003eCompatibility is geometry, not a part number.\u003c\/p\u003e\n\u003cp class=\"body\"\u003eEvery ESP32 DevKit has a different pinout, and every controller board is hard-wired to exactly one of them. So the board you bought last year is scrap when that module goes end-of-life, and the dev boards in your parts drawer are useless because none of them match the footprint someone else chose.\u003c\/p\u003e\n\u003cp class=\"body\"\u003eNODE Flex carries \u003cstrong\u003eboth\u003c\/strong\u003e common DevKit row spacings — 0.9″ and 1.0″ — with up to 22 positions per row. Module length does not matter: a shorter board seats in the same sockets and leaves positions empty. A jumper field then decides which module pin drives which output channel. If a module lands on 0.9″ or 1.0″ centres, it fits — \u003cem\u003eincluding modules that do not exist yet.\u003c\/em\u003e\u003c\/p\u003e\n\u003cp class=\"body\"\u003eWhen your favourite DevKit is discontinued — and it will be — you seat a different one and keep going. Same board, same protection, same firmware. For anyone maintaining an installed base across mixed hardware, \u003cstrong\u003ethis is the SKU that ends the inventory problem.\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp class=\"sec-label\"\u003eThe Architecture · Three Power Domains\u003c\/p\u003e\n\u003cp class=\"lead-claim\"\u003eThis is the part that matters.\u003c\/p\u003e\n\u003cp class=\"body\"\u003eFlexibility lives in the MCU interface. Nothing upstream of it was softened to get there. Most controllers have one power rail — input voltage lands on a terminal and it is the same copper that reaches your strips. Whatever arrives — spike, reverse polarity, sag, transient — arrives everywhere at once.\u003c\/p\u003e\n\u003cp class=\"body\"\u003e\u003cstrong\u003eNODE splits power into three separate domains on their own copper planes:\u003c\/strong\u003e\u003c\/p\u003e\n\u003cdiv class=\"domains\"\u003e\n\u003cdiv class=\"domain\"\u003e\n\u003cdiv class=\"num\"\u003e01\u003c\/div\u003e\n\u003cdiv\u003e\n\u003ch3\u003eDirty power in\u003c\/h3\u003e\n\u003cp\u003eThe input terminal accepts whatever the supply, the wiring, and the person doing the wiring hand it. Assumed hostile, isolated to the smallest region of the board possible, and nothing downstream touches it directly.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"domain\"\u003e\n\u003cdiv class=\"num\"\u003e02\u003c\/div\u003e\n\u003cdiv\u003e\n\u003ch3\u003eClean power\u003c\/h3\u003e\n\u003cp\u003eBetween dirty and clean sits the protection stage: bidirectional transient clamping and an \u003cem\u003eactive\u003c\/em\u003e reverse-polarity blocker. Reverse the supply and the pass element never turns on — no current path to the rest of the board, nothing sacrificed, and the \u003cspan class=\"redled\"\u003ered indicator\u003c\/span\u003e tells you why. Correct the wiring and it recovers on its own.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"domain\"\u003e\n\u003cdiv class=\"num\"\u003e03\u003c\/div\u003e\n\u003cdiv\u003e\n\u003ch3\u003eThe protected bus\u003c\/h3\u003e\n\u003cp\u003eClean power passes the main fuse to become the distribution bus. Each of the eight output channels taps that bus through its own fuse. A fault on run six opens one fuse and the other seven never notice.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"beefcake\"\u003e\n\u003cp class=\"word\"\u003eBEEFCAKE.\u003c\/p\u003e\n\u003cp\u003eThe pass element is a 205 A MOSFET on a 30 A board. It will never be the thing that fails.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"rtb\"\u003e\n\u003ch4\u003eDecoupling where the current actually is.\u003c\/h4\u003e\n\u003cp class=\"body\"\u003eTwo thousand microfarads of bulk sits on the protected bus, and another forty-seven at \u003cem\u003eevery single output connector\u003c\/em\u003e. One reservoir at the input cannot cover the harness inductance of eight separate output runs no matter how large it is. When a full-white frame lands on all eight channels at once, each channel draws from its own reserve sitting centimetres from its terminal.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"rtb\"\u003e\n\u003ch4\u003eFour levels of protection between the screw terminal and your pixels.\u003c\/h4\u003e\n\u003cp class=\"body\"\u003eClamp, active block, main fuse, channel fuse — each on its own copper. That is why this is a four-layer board with a split inner power plane rather than two layers and one pour.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cp class=\"sec-label\"\u003eWhat Else You Actually Get\u003c\/p\u003e\n\u003cp class=\"lead-claim\"\u003eThree things field abuse can kill. All three pull out by hand.\u003c\/p\u003e\n\u003cp class=\"body\"\u003eThe parts most likely to die in the field are the parts you can replace in a garage — by hand, with parts you can source anywhere. No hot air, no solder braid, no scrapped board.\u003c\/p\u003e\n\u003cdiv class=\"domains\"\u003e\n\u003cdiv class=\"domain\"\u003e\n\u003cdiv class=\"num\"\u003e01\u003c\/div\u003e\n\u003cdiv\u003e\n\u003ch3\u003eThe fuse\u003c\/h3\u003e\n\u003cp\u003eA mini blade — the variety-pack part sold at every gas station and parts counter in the country. Pulls with fingers, costs pennies. Not a cartridge you order online and wait for.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"domain\"\u003e\n\u003cdiv class=\"num\"\u003e02\u003c\/div\u003e\n\u003cdiv\u003e\n\u003ch3\u003eThe buffer\u003c\/h3\u003e\n\u003cp\u003eA jellybean octal logic IC in a DIP socket, sitting directly behind your wiring — the part most likely to die and the most annoying to replace anywhere else. Here it lifts out with a fingernail, and the socket takes \u003cem\u003eeither a '541 or a '245\u003c\/em\u003e — fit whichever is in stock.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"domain\"\u003e\n\u003cdiv class=\"num\"\u003e03\u003c\/div\u003e\n\u003cdiv\u003e\n\u003ch3\u003eThe MCU\u003c\/h3\u003e\n\u003cp\u003eA socketed module. Blow it up, seat another. No hot air, no braid, no scrap board. Nobody else in this class can claim all three.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"rtb\"\u003e\n\u003ch4\u003eData lines treated like data lines.\u003c\/h4\u003e\n\u003cp class=\"body\"\u003eEach output runs through a series resistor and a sub-picofarad ESD device on the \u003cem\u003econnector\u003c\/em\u003e side, where transients actually arrive. The low-capacitance part is deliberate: a fat protection diode rounds off WS281x bit timing and gives you a board that works on the bench but not on a 40-foot run. This one holds timing all the way out.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"rtb\"\u003e\n\u003ch4\u003eConformal coated — not shipped bare.\u003c\/h4\u003e\n\u003cp class=\"body\"\u003eEvery board is conformal coated after assembly, with connectors, sockets, fuse clips and switches masked. Competing boards in this class ship uncoated. A coated board in a vented enclosure shrugs off the condensation and humidity a bare board can't — which is the whole game for a seasonal outdoor install.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"rtb\"\u003e\n\u003ch4\u003eDefined-state inputs.\u003c\/h4\u003e\n\u003cp class=\"body\"\u003eBecause a channel's jumper may legitimately be left unset, every buffer input carries a pull-down. An unconfigured channel sits at a known logic low instead of floating and driving whatever it feels like — darkness rather than noise. It's the detail that separates a real universal carrier from a breakout board with headers.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cp class=\"stat-head\"\u003eAt the top of the range — the full 48 V, every common pixel voltage on one board — no component in the power path runs above \u003cb\u003e80%\u003c\/b\u003e of its rating.\u003c\/p\u003e\n\u003cdiv class=\"stats\"\u003e\n\u003cdiv class=\"stat\"\u003e\n\u003cdiv class=\"n\"\u003e80%\u003c\/div\u003e\n\u003cdiv class=\"l\"\u003ePass MOSFET\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"stat\"\u003e\n\u003cdiv class=\"n\"\u003e74%\u003c\/div\u003e\n\u003cdiv class=\"l\"\u003eIdeal-diode controller\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"stat\"\u003e\n\u003cdiv class=\"n\"\u003e60%\u003c\/div\u003e\n\u003cdiv class=\"l\"\u003eBuck regulator\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cp class=\"believe\"\u003eThe ≥63 V power plane is what makes that possible — finding the board real-estate for that headroom was the hard part, and it keeps even the bulk reservoir at 76%, wide open, at the top of the range. Drop to a 36 V system and the whole path falls back under 60%. It is a number nobody else in this class publishes, and it is \u003cstrong\u003ethe reason to believe the rest of this page.\u003c\/strong\u003e\u003c\/p\u003e\n\u003c\/div\u003e","brand":"Wateefy Electronics","offers":[{"title":"Node Flex LED Controller Board Only","offer_id":55084547506548,"sku":"Node-Flex-00","price":99.0,"currency_code":"USD","in_stock":true},{"title":"Node Flex \/ TI SN74AHCT541N \/ 40pcs 20 cm Dupont Jumpers","offer_id":55084504514932,"sku":"Node-Flex-02","price":115.0,"currency_code":"USD","in_stock":true},{"title":"Node Flex \/ TI SN74AHCT541N \/ 40pcs 20 cm Dupont Jumpers \/ 8 Terminal outputs","offer_id":55084504482164,"sku":"Node-Flex-01","price":125.0,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1015\/0487\/6916\/files\/NodeFlex.png?v=1785958224","url":"https:\/\/shop.wateefy.com\/products\/node-flex-led-controller","provider":"Wateefy Electronics","version":"1.0","type":"link"}