Prophet X firmware patches and SSD tools
This project documents a set of user-created bugfixes and improvements for the Sequential Prophet X. It includes a local firmware patcher, implementation sources and test evidence for each feature, and a guide detailing how to install a larger SSD. No affiliation with Sequential. No firmware images or extracted payloads are distributed here. Install at your own risk and keep generated firmware images private. LLMs used throughout. Thanks to rvense for taking the first steps.
What is included
- Direct patcher: python script that generates a flashable firmware file with the changes described in the changelog below.
- SSD expansion guide: details on how to prepare and fit a larger SSD.
- Feature and version history: follows the build chain and links to each feature's implementation, test status and packaging evidence.
- Firmware architecture and map: container format, QNX/PIC/FPGA components and version-specific offsets.
- Contributing: evidence, reproduction and copyright requirements for proposed changes. PRs and bug reports welcome.
Changelog for PxUpdate_V2.2.2.2.2.bin
| Feature | Description |
|---|---|
| Voice steal bug | Fixed bug where amp envelope attack was ignored on voice steal, causing a harsh click when sample start was set on a non-zero crossing. |
| SysEx bug | Fixed bug where the synth ignored sysex when set to receive midi on any channel but 2 or omni. |
| Window scroll clicks | Reduced clicking when scrolling Start or End across loop boundaries, particularly with short windows. |
| Sample-end fade | Added a 5 ms fade on sample end, including reverse playback. Eliminates clicks caused by stopping at non-zero crossings when looping is disabled. |
| Center moves window | Center can now move the Start/End window through the sample instead of being constrained inside it. |
| Start/End push Center | Allows sample Start and End values to push the Center position instead of being blocked by it. |
| Window bug | Fixed bug where editing both sample layers together could allow Start to move past End and leave the sample window in an invalid state. |
| Tail retrigger bug | Fixed bug where increasing End after a held sample had already finished could unexpectedly retrigger the newly exposed tail. |
| Loop sync divisions | Previously minimum loop sync was 1/16. This has been reduced to allow 1/32 and 1/64. |
| Preset browsing lag | Reduced screen lag when scrolling presets. |
| Encoder acceleration fix | Removed acceleration from all encoders except for sample controls. |
| Stretch velocity layer | Enabling stretch while a note is held now selects the held velocity layer in addition to its note, and the layer can be changed using the menu as expected. Previously stretch would always choose the highest layer with no way of changing it. |
| Type encoder tweak | Moving the 'type' encoder now starts instruments at entry number 2 if it exists instead of the always-blank entry 1, making it easier to see which types are populated with instrument samples when scrolling. |
Patching the firmware using the supplied tool:
The firmware_builder/patch.py converts your exact factory 2.2.2.0.0 update into the combined 2.2.2.2.2 update. All listed features are included. The patcher is cross-platform, you just need Python 3.11 or newer.
-
Read RECOVERY.md, open up your synth by following this video and create a backup image of your SSD.
-
Download and extract the whole repository.
-
Download the latest factory firmware
PxUpdate_V2.2.2.0.0.binfrom Sequential. -
Copy that firmware file into
firmware_builder/, alongsidepatch.py. -
In your terminal or Command Prompt, use
cdto enter thefirmware_builder/folder. -
Run the patcher. On macOS or Linux:
python3 patch.pyOn Windows:
py -3 patch.pyThe patcher finds
PxUpdate_V2.2.2.0.0.binbeside the script and savesPxUpdate_V2.2.2.2.2.binthere automatically. Existing output files or reports are never overwritten; move an earlier result before running again. -
Check that the command completes successfully. It prints four completed stages with timings, then the final filename, size and SHA-256. The update
PxUpdate_V2.2.2.2.2.binand its verification report are saved insidefirmware_builder/, alongside the factory file. -
Copy the new firmware file to your update USB drive and verify that copy too. Keep the filename exactly
PxUpdate_V2.2.2.2.2.bin; the synth will ignore firmware files that diverge from this naming scheme. -
Follow Sequential's Prophet X update procedure to install it.
Alternatively: build from source
You can review and rebuild the update from the feature sources without using the direct firmware patcher. See the detailed source-build guide for prerequisites, build stages and validation details. The source build script runs those stages in order. Copy the factory PxUpdate_V2.2.2.0.0.bin into firmware_builder/, as in the direct patcher instructions above. In your terminal, use cd to enter that folder, then run:
python3 source_rebuild/source_pipeline.py PxUpdate_V2.2.2.0.0.bin --work-dir source-build
The output PxUpdate_V2.2.2.2.2.bin is saved in firmware_builder/. The new source-build/ folder retains staged sources, compiler output, intermediate packages, validation reports and build.log. Neither the output file nor source-build/ may already exist; move an earlier run elsewhere before rebuilding.
This build requires the macOS compiler environment described in the source build guide. For a manual build, follow the ordered script invocations in build() in source_pipeline.py and review each stage's guards and reports. Verify the saved output below, then follow the USB copy and installation steps above.
Independently verify the saved file
Compare both the size and SHA-256 with these values. Renaming a file does not change its identity.
| File | Bytes | SHA-256 |
|---|---|---|
| Factory 2.2.2.0.0 | 3,099,064 | a4b304b3bb48ca933ae63c99c0098698c497ebfc7c38ab2a823b5e0df4919fa9 |
| Patched 2.2.2.2.2 | 3,187,784 | 488444589607a1b4e793a8d8f79a67c5bd50773b722c302e6d80bc1db77b4b7c |
This command reads the saved file independently of the patcher. Replace the path with your output path; use py -3 on Windows:
python3 -c "import hashlib,pathlib,sys; p=pathlib.Path(sys.argv[1]); b=p.read_bytes(); print('Bytes:',len(b)); print('SHA-256:',hashlib.sha256(b).hexdigest())" /path/to/private-workspace/PxUpdate_V2.2.2.2.2.bin
Require both final values to match before installation. Repeat the check on the copy placed on the update media. A mismatch means that copy is not the documented final package.