Use Studio → Send to your ESP32 → New ESP32? Start here. The recommended path is Connect ESP32 → Install Firmware → Configure Skelly. No Arduino software, manual Actions download, GitHub account, backend or paid hosting is needed. An original ESP32-WROOM development board with 4 MB flash and a USB data cable are required. Use a desktop browser with Web Serial (Chrome/Edge recommended) over HTTPS or localhost. Browser flashing is Software-only / physically Untested. The owner’s successful USB read/save and preview reports do not establish flashing.
You do not need a scene for a first routine. Save this routine sends the current editor settings as one program. Save scene collection sends the saved Scene builder library and its switching policy. Both replace the current ESP32 program; neither flashes firmware. Changes use the existing USB transaction, CRC, idle-boundary protection and read-back. Firmware, USB field layout, motor timing and existing profiles/scenes are unchanged by this installation UI.
Ultra remains the default. Deliberately selecting the experimental 2026 12-foot profile in Advanced chooses a separate restricted universal package. Its return link restores that model in the editor with the warning visible. Unknown or mixed models reject before offering an installer. No older 12-foot models are included, and no firmware is written to the prop.
Build USB installer packages compiles head-only Ultra plus universal Ultra and
experimental 12-foot ESP32 images with Arduino-ESP32 3.3.12, explicit DIO flash
mode and the original ESP32 target. Universal seeds are head-only, optional features
OFF: Ultra 60–120 s, experimental 90–120 s. Body protections are unchanged.
On a successful main smoke-test run, the packaging workflow checks out that
exact tested SHA. It validates both universal artifacts (model, source commit,
freshly regenerated source hash, binary hash, size, boot/app headers, safe seed,
release and manifest), builds the existing static site, and uploads one Pages
artifact. Deployment refuses a SHA that is no longer main. PRs and manual package
runs build artifacts but cannot deploy. Pages must use GitHub Actions as its
publishing source. The github-pages environment and Pages/OIDC permissions are
limited to the deploy job; the build job has read-only repository access.
studio/firmware/catalog.json selects packages beneath
studio/firmware/<release>/<full-source-SHA>/<model>/. The browser accepts only
these constructed same-origin paths, rejects redirects, bounds downloads and
checks SHA-256 plus chip/core/model/release/headers before offering USB access.
Only verified bytes become the installer’s Blob image. Stale/mixed deployments
fail closed with reload/retry guidance. Hash consistency is not a publisher
signature: trust the reviewed repository and its HTTPS Pages origin. No private
token is shipped to the browser. Versioned paths identify this deployment’s
packages; old paths are not promised permanent retention. CI artifacts retain
the reviewed packages for 90 days for maintainers.
The existing pinned ESP Web Tools 10.2.1 loads from unpkg only on explicit preparation. Internet is needed for first installation. Offline generation and USB settings remain local; installed firmware runs without internet or a browser. The manifest offers only ESP32, forces a fresh installation and disables the Wi-Fi provisioning wait. ESP Web Tools rejects other chip families before erase/write. It cannot prove the exact WROOM module, flash capacity, power quality or USB cable; the board marking/specification check remains explicit.
The installer owns progress and completion reporting. Studio does not infer a successful flash from opening/closing a dialog and never opens the configuration port automatically. Close the installer and choose Connect ESP32 again. This also avoids two readers contending for the same USB port.
No port: use a data cable, another USB socket and the board’s CP2102/CH340 driver. Port busy: close serial monitors/apps/tabs. Failed initialization: hold BOOT while connecting and release after detection; retry with EN/Reset if needed. Wrong chip: use original ESP32-WROOM, never force another family. A cancellation before writing changes no firmware; interrupted writing requires a complete reinstall. After completion, close the dialog, press EN/Reset if needed, reconnect in Studio and Retry identification. Keep logs if Ready never appears.
Advanced Arduino fallback in Studio downloads model-specific universal source.
Use ESP32 Dev Module and core 3.3.12. A local reviewed build.json plus its matching
binary remains available under Advanced on the installer page. Legacy metadata
without a model means Ultra. The fixed head-only package cannot accept USB settings;
it is clearly identified and is not the beginner default.
Rollback: install your saved known-working ESP32 sketch or reviewed package, then restore exported profiles/scenes over USB. Do not rely on old NVS surviving a browser full-image installation. Switching models normally uses separate namespaces/formats, but full erase clears both. Nothing changes the prop firmware.
Keep a known-working sketch, exported scenes and the prop power switch accessible. Record board marking/flash size, USB adapter, browser/OS, package release/full SHA and result separately from software logs.
Stop: unexpected movement, repeated resets, lost USB during writing or repeated connection failures: turn off ESP32 and Skelly, retain logs, and recover the ESP32 with the known-working firmware before testing again. Pass requires an observed complete flash, successful configuration/read-back, retention and separately observed physical behavior. Until an owner supplies those results, browser flashing/recovery stays Untested in the hardware matrix.
Primary references: ESP Web Tools manifest/merged-image requirements, pinned installer source, GitHub Pages custom workflows.