Important Notice: I have moved to a new domain. This site is no longer being updated. Read more here.
Notice: as of 2020-04-10, beat has been discontinued. I recommend switching
to the Flips patcher created by Alcaro instead:
Flips on GitHub
The page below is a snapshot of the final release for historical purposes.
Latest Version: v1
beat is the canonical tool for working with beat-protocol files. At this time, only the BPS single-file patching protocol is finalized and implemented.
beat is licensed under the GNU GPLv3 license.
Patches can be applied by first selecting the patch file, and then selecting the original, unmodified file you want to apply the patch to, and then selecting the new, modified file to output to, and then clicking on apply.
You can optionally choose to overwrite the original file (which will only happen if patching was successful), but this is not recommended. Doing so removes the need to select a different target file.
Patches can be created by first choosing the output patch file name, and then choosing the original, unmodified file, followed by the new, modified file, and then clicking on create.
beat can also be used as a command-line application or in shell scripts. The usage instructions panel provides the syntax for command-line usage.
BPS files are binary difference patches. BPS patches are created by comparing an original file to a modified file, and encoding the differences, which can then be distributed.
When the BPS file is applied to the original file, it will output the modified file.
Why use BPS instead of IPS?
BPS is meant as a successor to the IPS file format.
BPS patches support files of any size, unlike IPS which is limited to files that are 16 MB or less.
BPS patches encode checksums of the original file, the modified file, and the patch itself. This allows patchers to alert users when the wrong original file is used to apply a patch, unlike IPS that will silently produce a corrupted file with no warning.
BPS patches can encode deltas, which represent data that has been inserted into or removed from the original file. IPS files can only store linear changes, and when encountering a delta, it degrades to storing the entire file, creating a patch that is often larger than the modified file was to begin with.
BPS patches have adaptive length and offset pairs, and support a more sophisticated form of block-level RLE, which means that even without deltas, BPS patches are smaller than their equivalent IPS patches, usually substantially so.
BPS patches can store an unlimited amount of optional metadata, which can include patch authorship information, user documentation, or anything else.
Like IPS files, it is possible to apply multiple BPS files to the same target file.
Like IPS files, BPS files can be automatically soft-patched onto game ROMs in most popular emulators.
Like IPS files, applying a BPS patch or creating a linear BPS patch ala IPS is trivial, requiring only a few simple lines of code.
Creating BPS delta patches is of course more involved. beat currently accomplishes this by using induced-sorted suffix arrays. BPS patches only have to be created once, and the canonical beat application produces delta patches.
Unlike IPS files, there is only one canonical BPS standard. The format does not contain multiple third-party extensions (such as IPS CLIP), because the original standard covers all use cases for a binary patcher.