A desktop GUI for flashing SPI flash chips with flashprog (or flashrom) through a Raspberry Pi Pico running a modified pico-serprog firmware.
The firmware adds up to ten chip-select lines, so one Pico can serve several sockets: HydraFlasher scans them live, flashes and verifies each chip, and logs every run.
Note that: This is a full vibe coded project for my work. I do not prefer vibe coding, this is just a SNCA project so I can make my work easier and faster.
User guide: see the wiki: features, use cases and troubleshooting.
| Path | What |
|---|---|
HydraFlasher.py |
The GUI (Python, customtkinter) |
firmware/ |
Pico serprog firmware with multi-CS, status LEDs and on-device CRC32 |
packaging/ |
Builds the Windows installer, portable .exe and Linux AppImage |
tests/ |
GUI tests with a fake Pico and a fake flashprog (tests/run_all.sh) |
tools/ |
Scripts that draw the pinout, the icons and the README screenshot |
Get the newest release:
| System | File |
|---|---|
| Windows | HydraFlasher-Setup-<version>.exe (installer) or HydraFlasher-<version>-portable.exe (no install) |
| Linux | HydraFlasher-<version>-x86_64.AppImage: chmod +x, then run it. Needs FUSE (sudo apt install fuse3 on Debian/Ubuntu), or start it with --appimage-extract-and-run |
You still need flashprog (or flashrom); HydraFlasher asks for it on the first
start if it can't find it. The Pico firmware has its own releases (fw-v…), which
the app installs from its settings page.
Needs Python 3.8+ with Tk, and flashprog or flashrom on the PATH.
pip install -r requirements.txt
python3 HydraFlasher.pyOn Linux your user needs access to the Pico's serial port (usually the
dialout or uucp group).
Pinout:
| Signal | GPIO |
|---|---|
| SCK | GP2 |
| MOSI | GP3 |
| MISO | GP4 (pull-up) |
| CS0 to CS9 | GP5 to GP14 |
| LED busy / pass / fail | GP16 / GP17 / GP18 |
Build with the Pico SDK (PICO_SDK_PATH set, or a pico-sdk checkout in or
next to firmware/):
cd firmware
./build.sh # builds build/pico_serprog.uf2
./build.sh flash # builds, then copies it to a Pico in BOOTSEL modeGitHub Actions also builds the .uf2 on every push that touches firmware/. Pushing a tag
fw-v<version> (matching FW_VERSION in firmware/main.c) publishes it as a GitHub Release,
which the app's settings page can download and install on the Pico.
Copyright © 2026 Jakub Heger. HydraFlasher is free software: you can redistribute
it and/or modify it under the terms of the GNU General Public License, version 3
or (at your option) any later version, see LICENSE.
It comes with no warranty. Flashing writes and erases chips: keep a backup (read the chip first) of anything you can't replace.
The firmware keeps its upstream licenses (GPLv3, firmware/COPYING); a built
.uf2 also contains the Pico SDK and TinyUSB, whose notices are in
firmware/NOTICE. The downloadable app packages include the licenses of the
software bundled with them in THIRD-PARTY-LICENSES.txt (settings → version →
licenses).

