Title: Manual USB Flashing Description: Flash a downloaded GhostESP release when the web flasher is unavailable URL: /latest/getting-started/manual-flashing/ Version: latest Section: Getting Started Search index: /search-index.json # Manual USB Flashing > Flash a downloaded GhostESP release when the web flasher is unavailable ## On this page - [Flash the firmware](#flash-the-firmware) - [Advanced: flashing the separate binaries](#advanced-flashing-the-separate-binaries) - [Troubleshooting](#troubleshooting) - [Related tasks](#related-tasks) --- Manual USB flashing installs a downloaded release bundle with ESP Huhn Tool. Use it when you need a specific release file or the recommended web flasher is unavailable. Download the firmware .zip for your board from [GhostESP Releases](https://github.com/GhostESP-Revival/GhostESP/releases) and extract it with [7-Zip](https://www.7-zip.org/download.html) or a similar tool. You also need a compatible board and USB data cable, plus Chrome, Brave, or Edge for [ESP Huhn Tool](https://esp.huhn.me/). ## Flash the firmware Enter bootloader mode first: hold BOOT, connect USB, then release BOOT. If that does not work, hold BOOT, tap RESET, wait 1-2 seconds, then release BOOT. - Extract the downloaded firmware archive. - Open [ESP Huhn Tool](https://esp.huhn.me/) and click Connect. - Select the board’s serial port. - Add merged.bin at offset 0x0. This single file contains the bootloader, partition table, and firmware at the correct offsets for your board, so it is the recommended path. - Click Flash and wait for it to finish. - Unplug and reconnect the board. GhostESP starts and creates the GhostNet access point. You can verify boot output with a [serial console](https://ghostesp.net/serial) at 115200 baud. ## Advanced: flashing the separate binaries If you prefer to flash the individual files, use the offsets below. The bootloader offset depends on the chip, and the firmware offset depends on your board’s partition layout - getting either wrong produces a board that flashes successfully but never boots. Chip | bootloader.bin | partitions.bin | firmware.bin | ESP32, ESP32-S2 | 0x1000 | 0x8000 | 0x10000 (factory) or 0x20000 (OTA) | ESP32-C5, ESP32-P4 | 0x2000 | 0x8000 | 0x10000 (factory) or 0x20000 (OTA) | ESP32-S3, ESP32-C3, ESP32-C6 | 0x0 | 0x8000 | 0x10000 (factory) or 0x20000 (OTA) | Check the OTA column in [Supported Hardware](/latest/getting-started/supported-hardware/): ✓ means the release uses a dual-partition layout, so firmware.bin usually belongs at 0x20000, and Manual builds use the single-app layout at 0x10000. Some OTA boards use a custom offset instead: S3TWatch uses 0x800000, the C5 flash-XIP builds (NM-CYD-C5, T-Dongle-C5) use 0x500000, and CrowPanel P4 builds use 0x490000. If you are unsure which you have, flash merged.bin instead. ESP32-C5 note: the C5 ROM expects the bootloader at 0x2000, not 0x1000 or 0x0. Some third-party flasher instructions still say 0x0 for C5 boards - that will not boot. ## Troubleshooting - The board is not detected: Use a data-capable cable, close other serial apps, and retry bootloader mode. - Flash fails: Confirm that each binary came from the same release archive and uses the matching offset. - The board loops after flashing: Check that the downloaded release matches the exact board and chip. ## Related tasks - [Installation Guide](/latest/getting-started/installation-guide/) - [Flash with Flipper Zero](/latest/getting-started/flipper-flashing/) - [Connect to GhostESP](/latest/getting-started/control-methods/)