Conversation
added 2 commits
August 20, 2026 07:40
Firmware built with the "Build" job type was copied into a temporary folder and that folder was opened in the file explorer. Temporary folders are cleaned up by the operating system, so users doing a WiFi build had to move the binary out of an obscure path before it was gone. The destination is now configurable in the settings screen: - ask every time (default): a folder selection dialog is shown after every successful build - always save into the same folder: firmware is copied there without further interaction - temporary folder: previous behaviour In the first two modes a folder named after the firmware is created in the selected location, so builds do not overwrite each other, and the file explorer is opened at the new location as before. Flashing jobs are not affected.
Build artefacts are not always named after the device target: a WiFi build produces a plain "firmware.bin.gz", which resulted in an output folder called "firmware" that gives no hint about what is inside. The renderer now passes the device target and the firmware version along with the save request, so the folder becomes something like "Happymodel_EP_2400_RX_via_WIFI-3.5.6". The firmware filename is still used as a fallback when the target is unknown.
Raffi1202
force-pushed
the
feature/firmware-output-folder
branch
from
September 8, 2026 05:08
42f6434 to
64e8e6f
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
Firmware built with the Build job type (for example a WiFi build, where the
binary is uploaded through the device's web interface afterwards) is copied into
a temporary directory created with
os.tmpdir()and that directory is opened inthe file explorer.
The operating system cleans temporary directories up, so the binary has to be
moved somewhere safe manually, out of a path like
C:\Users\<user>\AppData\Local\Temp\TX_ESP32_a7f3k2\, before it disappears.There is currently no way to tell the configurator where builds should end up.
Change
The destination of a build is now configurable in Settings → Firmware Output
Folder:
dialog is shown after every successful build
once, without further interaction
In the first two modes a folder named after the firmware is created inside the
selected location (
D:\ELRS\MyTX-3.5.6\), so builds do not overwrite eachother, and every artefact of the build is copied into it. The file explorer is
opened at the new location, exactly as it was before.
Cancelling the dialog leaves the firmware in the temporary folder, so nothing is
lost if the dialog is dismissed by accident.
Notes
Buildjob type is affected; flashing is untouched, sincefirmwareBinPathis only returned for builds.SAVE_BUILD_OUTPUTIPChandler), the renderer only passes the localized dialog strings.
CHOOSE_FOLDERaccepts an optional title/message/default path now, so thesettings screen can reuse it. Existing callers are unaffected.
options.
entranslations are added, the remaining locales are managed byCrowdin.
If preferring no behaviour change out of the box, the default mode can be
switched to
FirmwareOutputMode.TemporaryFolderinAppStateProvider— happyto change that if you would rather have this opt-in.
Testing
yarn typecheckandyarn lint: no new errors