Factory Flashing Toolkit (Local-Only)
This toolkit now runs in local-only mode.
- Network workflows are not used.
flash.bin_encryptionconfig item is no longer supported.- Firmware package format is always
.bin.enc+.sig.
Quick Start
1) Build firmware
From project root:
idf.py build
idf.py build now auto-overwrite-syncs required plaintext build outputs
from build/flasher_args.json into tools/esptool-factory/bin/.
If you already built firmware and only want to refresh bin files manually:
python3 tools/esptool-factory/sync_factory_bins.py
2) Prepare private config
Use plaintext config:
tools/esptool-factory/conf/factory_private.json
Requirements:
- Do not set
flash.bin_encryption. - Keep
flash.layout/app_bin_namealigned with current build outputs. flash.app_bin_namemust exist inflash.layout, andflash.app_partition_offsetmust match that layout entry offset.flash.flash_args(flash_mode/flash_freq/flash_size/before/after) must use supported enum values.flash.layoutuses original build artifact names (for examplebootloader.bin); the packager converts them tobootloader.bin.encautomatically.
3) Package
From project root:
tools/esptool-factory/.venv/bin/python3 tools/esptool-factory/package_factory_tools.py
By default, the packager now directly uses files in tools/esptool-factory/bin/.
If you still want packager-side sync from build/, use:
tools/esptool-factory/.venv/bin/python3 tools/esptool-factory/package_factory_tools.py \
--sync-build-bins
The packager always uses:
tools/esptool-factory/keys/firmware/fw_key.bin
and copies it into the release package under keys/firmware/fw_key.bin.
Default output:
tools/esptool-factory/dist/factory/
You can change output folder name:
tools/esptool-factory/.venv/bin/python3 tools/esptool-factory/package_factory_tools.py \
--package-name line-a
4) Factory use
- Run packaged GUI.
- Connect device and click start.
- Tool executes: device check -> flash -> post-flash check.
- If secure boot is already enabled but flash
0x0header is blank/invalid, GUI will switch to initial full-flash provisioning (with force semantics where needed) instead of app-only. forceis gated tobootloader@0x0only. Before writing, GUI re-checks bootloader image chip/revision compatibility and blocks plaintext force if flash encryption appears enabled.
- If secure boot is already enabled but flash
No environment variable is required for .enc decrypt key.
The GUI reads keys/firmware/fw_key.bin from the package directory.
No network endpoint is required.