Canonical: https://rom-weaver.com/docs/apply-rom-patches

# How to patch a ROM: BPS, IPS, UPS, or xdelta patches

Patch a ROM in four steps with the free [online ROM patcher](<https://rom-weaver.com/apply-rom-patches>): add your ROM and an IPS, BPS, UPS, or xdelta patch, then download the result. No uploads.

<a id="how-to-apply-bps-ips-ups-and-xdelta-patches"></a>

<a id="apply-bps-ips-ups-and-xdelta-rom-patches-online"></a>

<a id="rom-patcher-online-apply-bps-ips-ups-and-xdelta-patches"></a>

<!-- START doctoc -->
## Table of contents

- [Patch a ROM in four steps](<#patch-a-rom-in-four-steps>)
- [What do you need?](<#what-do-you-need>)
- [Add the files](<#add-the-files>)
- [Apply a BPS patch](<#apply-a-bps-patch>)
- [Apply an IPS or IPS32 patch](<#apply-an-ips-or-ips32-patch>)
- [Apply a UPS patch](<#apply-a-ups-patch>)
- [Apply an xdelta or VCDIFF patch](<#apply-an-xdelta-or-vcdiff-patch>)
- [Apply a PPF patch](<#apply-a-ppf-patch>)
- [Apply APS, APSGBA, RUP, and other patch formats](<#apply-aps-apsgba-rup-and-other-patch-formats>)
- [Apply an HDiffPatch or HPatchZ patch](<#apply-an-hdiffpatch-or-hpatchz-patch>)
- [Apply a Dreamcast DCP patch](<#apply-a-dreamcast-dcp-patch>)
- [Read the ROM and patch cards](<#read-the-rom-and-patch-cards>)
- [Apply multiple patches in order](<#apply-multiple-patches-in-order>)
- [Add cheats to the patch order](<#add-cheats-to-the-patch-order>)
- [Choose the output and apply](<#choose-the-output-and-apply>)
- [Download one combined patch](<#download-one-combined-patch>)
- [Open a weave](<#open-a-weave>)
- [If the ROM does not match](<#if-the-rom-does-not-match>)
- [Use the result safely](<#use-the-result-safely>)

<!-- END doctoc -->

## Patch a ROM in four steps

1. Open the [online ROM patcher](<https://rom-weaver.com/apply-rom-patches>).
2. Drop your clean ROM and the IPS, BPS, UPS, or xdelta patch into **0x01 Inputs**.
3. Wait for checksumming, then open **Checks**. If the source does not match, [fix the checksum mismatch](<https://rom-weaver.com/docs/fix-checksum-errors.md>) first.
4. Select **APPLY & DOWNLOAD** and save the patched ROM. Your original stays untouched.

A `.bps`, `.ips`, or `.ups` file is a patch, not a game: an emulator cannot run it until you apply it to the ROM it was made for.

## What do you need?

You need the patch and your own copy of the exact game release it was made for. The files have different roles:

- **Original ROM:** the starting game file named by the patch author. Add it to Apply alongside the patch. Keep a clean copy.
- **Patch:** a file such as `.bps`, `.ips`, `.ups`, or `.xdelta` that describes changes to the original ROM.
- **Archive:** a ZIP, 7z, or RAR that can contain a ROM, a patch, or both. Its extension identifies the archive, not the patch format.
- **Output ROM:** the new game file created by applying the patch. You download it and play it in an emulator or on supported hardware.

Keep the patch author's notes open and check:

- the region, such as USA, Japan, or Europe;
- the revision, such as Rev 0 or Rev 1;
- the checksum and its algorithm;
- whether the ROM has a header;
- the order, when there is more than one patch.

Compare the checksum, not the filename; [how patching works](<https://rom-weaver.com/docs/how-patching-works.md#what-a-checksum-proves-and-what-a-filename-does-not>) explains why. Changing a patch's format does not fix a ROM mismatch. See [patch formats](<https://rom-weaver.com/docs/patch-formats.md>) or the [tool comparison](<https://rom-weaver.com/docs/comparisons.md#applying-a-patch>).

Without the source file, use **Identify by checksum or game name** below the empty drop zone or in **0x02 ROM**. Search a checksum, or choose a game, system, region, and revision. The card shows locally indexed checksums and size. This search appears only when a weave or patch has not already named the expected source.

Keep one clean original somewhere safe. rom-weaver writes a separate result, but a known-good copy makes updates and troubleshooting easier.

## Add the files

1. Open [Apply](<https://rom-weaver.com/apply-rom-patches>).
2. Drop the ROM and patch into **0x01 Inputs**, or choose **Add files**. A folder or [supported archive](<https://rom-weaver.com/docs/supported-formats.md#container-and-compression-formats>) also works; nested archives, CHD, and RVZ are unpacked.
3. Wait for **Reading** and **Checksumming**. If asked, choose the entry the author named.

Files dropped on Home, Docs, or What's New offer matching workflows.

The resulting cards separate **ROM**, **Patches & Cheats**, and **Apply** controls. To change only the container, use [Compress](<https://rom-weaver.com/docs/convert-roms-browser.md>).

New here? [Your first patch](<https://rom-weaver.com/docs/get-started.md>) supplies homebrew files. [Guided Apply](<https://rom-weaver.com/apply-rom-patches?guide=apply>) waits for your files; **Continue** with none, past the Identify search, loads samples. The [cheats tour](<https://rom-weaver.com/apply-rom-patches?guide=apply-cheats>) supplies a sample code. [Input routes](<https://rom-weaver.com/docs/guided-runs.md#ways-files-get-into-apply>) lists other ways to add files.

## Apply a BPS patch

Apply a BPS patch online with the clean ROM its author names. BPS records the source ROM's CRC32, so **Checks** shows a match or a mismatch before you apply; if it fails, follow [Fix a source ROM checksum mismatch](<https://rom-weaver.com/docs/fix-checksum-errors.md>). Choose a plain output file unless your emulator or the patch author needs a compressed format, then [test the result](<https://rom-weaver.com/docs/test-roms.md#test-an-apply-result>).

For multiple patches, check [order and inputs](<#apply-multiple-patches-in-order>); for output options, see [choose the output and apply](<#choose-the-output-and-apply>).

## Apply an IPS or IPS32 patch

Add the `.ips`/`.ips32` and source. These formats contain no source checksum: compare the author's digest using [Checksum](<https://rom-weaver.com/docs/checksum-roms-browser.md>) and check the header state. Successful application alone does not prove the ROM is correct.

## Apply a UPS patch

Add the `.ups` and clean source. Check the card's input checks; resolve [region, revision, or header mismatches](<https://rom-weaver.com/docs/fix-checksum-errors.md>) before applying.

## Apply an xdelta or VCDIFF patch

Add the supplied `.xdelta`, `.delta`, `.dat`, or `.vcdiff` and the exact image or track named by the author. Source checks depend on how the patch was made; compare any published source digest before applying.

## Apply a PPF patch

Add the `.ppf` and exact ROM or track. Check the image layout and checksum; include the CUE and every BIN track for a BIN/CUE disc. For PPF3 undo data, see [Undo PPF](<https://rom-weaver.com/docs/undo-ppf-browser.md>).

## Apply APS, APSGBA, RUP, and other patch formats

The same input steps cover APS, APSGBA, RUP, SOLID, GDIFF, PAT/FireFlower, EBP, BDF/BSDIFF40, BSP, MOD/PMSR, DLDI, and DPS. Check the detected format and the author's source digest. The [reference](<https://rom-weaver.com/docs/supported-formats.md#patch-formats>) lists extensions and creation support.

## Apply an HDiffPatch or HPatchZ patch

Add a single-file `.hdiff`/`.hpatchz` and its matching source. Check the author's digest. Directory patches marked `HDIFF19` are unsupported; use the author's directory-patching tool.

<a id="dreamcast-dcp-patches-need-the-cli"></a>

## Apply a Dreamcast DCP patch

1. Add the Dreamcast disc: its `.gdi` or GD-ROM `.cue` with every track file, a GD-ROM CHD, or a ZIP or 7z of them. A GD-ROM cue does not need density markers; Dreamcast self-boot and MIL-CD CD-Rs are not GD-ROMs.
2. Check that the disc matches the DCP author's required release. A DCP carries no checksums, so Apply cannot check it for you.
3. Add the `.dcp` as the only patch, with no cheats turned on. Its card targets the whole disc and has no track, header, or checks controls.
4. [Choose the output and apply](<#choose-the-output-and-apply>): CHD, ZIP, 7z, or the uncompressed disc.

rom-weaver rebuilds the disc's GD-ROM data track and keeps every other track as it was. If the card says the DCP must be applied on its own, remove or turn off the other patches and cheats. If it asks for a GD-ROM disc, add the disc instead of a single file. The [CLI DCP procedure](<https://rom-weaver.com/docs/cli-apply.md#apply-a-dreamcast-dcp-patch>) produces the same disc.

NINJA1 and PDS cannot be applied. See [support limits](<https://rom-weaver.com/docs/supported-formats.md#patch-formats>).

## Read the ROM and patch cards

The ROM card shows filename, size, system, and checksums. A filename mismatch is advisory; checksum or size mismatches are strict. Open **Checks** for details.

Patch cards show format, position, and input/output checks. The three-dot **Patch actions** menu edits details, replaces the file, or removes it. Header controls appear where applicable.

<figure class="docs-screenshot">
  <picture data-docs-screenshot-theme="light">
    <source media="(max-width: 520px)" type="image/avif" srcset="https://rom-weaver.com/docs/screenshots/apply-patches-mobile-light.avif" width="1170" height="1433">
    <source type="image/avif" srcset="https://rom-weaver.com/docs/screenshots/apply-patches-desktop-light.avif" width="1770" height="788">
    <source media="(max-width: 520px)" type="image/webp" srcset="https://rom-weaver.com/docs/screenshots/apply-patches-mobile-light.webp" width="1170" height="1433">
    <img src="https://rom-weaver.com/docs/screenshots/apply-patches-desktop-light.webp" alt="Cropped Apply patch stack with two ordered practice patches in the light theme" width="1770" height="788">
  </picture>
  <picture data-docs-screenshot-theme="dark">
    <source media="(max-width: 520px)" type="image/avif" srcset="https://rom-weaver.com/docs/screenshots/apply-patches-mobile-dark.avif" width="1170" height="1433">
    <source type="image/avif" srcset="https://rom-weaver.com/docs/screenshots/apply-patches-desktop-dark.avif" width="1770" height="788">
    <source media="(max-width: 520px)" type="image/webp" srcset="https://rom-weaver.com/docs/screenshots/apply-patches-mobile-dark.webp" width="1170" height="1433">
    <img src="https://rom-weaver.com/docs/screenshots/apply-patches-desktop-dark.webp" alt="Cropped Apply patch stack with two ordered practice patches in the dark theme" width="1770" height="788">
  </picture>
  <figcaption>Patches run from top to bottom. Each card shows the checks for that step.</figcaption>
</figure>

<a id="put-several-patches-in-order"></a>

## Apply multiple patches in order

Patches run top to bottom. Each input selector chooses the state it modifies: keep **Automatic** for checksum inference, **Original ROM** for the clean source, or **Previous patch's result** for the preceding result. Once checks run, **Automatic** shows what they detected, such as **Original ROM (detected)**.

Drag a numbered handle to reorder; keyboard users can focus it and follow its announced controls. Switch optional patches **On** or **Off** only in tested combinations. Skipping a required base can break dependent patches.

Recheck **Checks** after changing order, inputs, or switches. Input checks describe the authored state. Embedded output checks describe a standalone patch's result, not necessarily the combined stack.

[Patch the supplied synthetic CHD](<https://rom-weaver.com/docs/patch-compressed-disc.md>) for a verified example: `01-first.bps` reads the Original; `02-second.bps` requires its output. The tutorial supplies intermediate and final checksums. Use your author's tested states for your own files.

## Add cheats to the patch order

To start with a ROM and cheat codes, open [Apply cheat codes](<https://rom-weaver.com/apply-cheats>).

In **Patches & Cheats**, select **Add cheats to the patch order**, then choose database entries or **Add code manually**. Place each code where it must run; it changes the preceding result. Check game/revision when matching by title, and resolve unsupported-code or write-conflict errors. [Use cheats](<https://rom-weaver.com/docs/use-cheats.md>) covers validation, export, and offline use.

## Choose the output and apply

If **APPLY & DOWNLOAD** is disabled, wait for checksumming and resolve the nearby warning. In **Apply**:

1. Enter a filename without an extension. Characters Windows rejects in file names (`< > : " / \ | ? *`) become spaces, and control characters are removed, in the saved file, archive entries, and cue sheet references; the field keeps what you typed. A name with nothing usable left gets the automatic name.
2. The format selector starts on the ROM's own extension, such as **.gba**, or a ROM-specific format for disc images such as **.chd**. A **.bin** starts on **.chd** only when its contents show a CD image ([content check](<https://rom-weaver.com/docs/supported-formats.md#container-and-compression-formats>)) or a supplied cue sheet names it; a cartridge **.bin** stays on **.bin**. To keep the raw output, pick its own extension, such as **.bin**; a disc with a cue or gdi sheet has several raw files, so its raw choice names them, such as **.bin/.cue** or **.gdi**, and saves them together in one uncompressed **.zip**. Pick **.zip** or **.7z** only if you need a compressed archive; the selector adds the extension.
3. Open **Options** for compression, output header, or weave controls when needed.
4. Choose **APPLY & DOWNLOAD**, wait, and save the new file.

<figure class="docs-screenshot">
  <picture data-docs-screenshot-theme="light">
    <source media="(max-width: 520px)" type="image/avif" srcset="https://rom-weaver.com/docs/screenshots/apply-output-mobile-light.avif" width="1170" height="924">
    <source type="image/avif" srcset="https://rom-weaver.com/docs/screenshots/apply-output-desktop-light.avif" width="1770" height="784">
    <source media="(max-width: 520px)" type="image/webp" srcset="https://rom-weaver.com/docs/screenshots/apply-output-mobile-light.webp" width="1170" height="924">
    <img src="https://rom-weaver.com/docs/screenshots/apply-output-desktop-light.webp" alt="Cropped Apply output card with filename, format, options, and APPLY &amp; DOWNLOAD button in the light theme" width="1770" height="784">
  </picture>
  <picture data-docs-screenshot-theme="dark">
    <source media="(max-width: 520px)" type="image/avif" srcset="https://rom-weaver.com/docs/screenshots/apply-output-mobile-dark.avif" width="1170" height="924">
    <source type="image/avif" srcset="https://rom-weaver.com/docs/screenshots/apply-output-desktop-dark.avif" width="1770" height="784">
    <source media="(max-width: 520px)" type="image/webp" srcset="https://rom-weaver.com/docs/screenshots/apply-output-mobile-dark.webp" width="1170" height="924">
    <img src="https://rom-weaver.com/docs/screenshots/apply-output-desktop-dark.webp" alt="Cropped Apply output card with filename, format, options, and APPLY &amp; DOWNLOAD button in the dark theme" width="1770" height="784">
  </picture>
  <figcaption>Choose the output name and format before applying.</figcaption>
</figure>

## Download one combined patch

Expand **Download a combined patch**, set its filename and format, then choose **Create patch & download**. It reproduces the enabled patches and ROM cheats in order when applied to your Original ROM. Use one ROM file; multi-file ROMs are unsupported.

[Create](<https://rom-weaver.com/docs/create-rom-patches.md#build-from-patches-and-cheats>) also supports this workflow.

<a id="open-a-bundle"></a>

## Open a weave

A weave ZIP dropped on Home, Docs, or What's New opens in **Apply Patches** or **Weave Patches**.

Add the [weave recipe](<https://rom-weaver.com/docs/bundles.md>) to **0x01 Inputs**, or open the author's preload link. Supply the matching ROM for a patch-only weave, review optional switches, and use **APPLY & DOWNLOAD**. To publish one, follow [Create a weave](<https://rom-weaver.com/docs/create-bundles.md>).

## If the ROM does not match

[Fix checksum errors](<https://rom-weaver.com/docs/fix-checksum-errors.md>) checks region, revision, archive selection, headers, byte order, patch order, and earlier edits. Do not bypass a mismatch to repair it.

## Use the result safely

[Test supported ROMs in the browser](<https://rom-weaver.com/docs/test-roms.md#test-an-apply-result>), or use your emulator/hardware. Exercise the modified parts; reaching the title screen does not prove every combination works. Keep the clean Original and name the output by project/version.

For automation, see [CLI Apply](<https://rom-weaver.com/docs/cli-apply.md>); to author changes, see [Create a patch](<https://rom-weaver.com/docs/create-rom-patches.md>). [Files stay local](<https://rom-weaver.com/docs/local-first.md>).
