Metadata-Version: 2.1
Name: vidua
Version: 0.4.5
Summary: Apply patches to ROMs and other files
Home-page: http://github.com/sopoforic/vidua
Author: Tracy Poff
Author-email: tracy.poff@gmail.com
Project-URL: Documentation, https://vidua.readthedocs.io/
Project-URL: Issues, https://github.com/sopoforic/vidua/issues
Classifier: Development Status :: 3 - Alpha
Classifier: License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Topic :: Utilities
Description-Content-Type: text/markdown
License-File: COPYING

# vidua

Vidua can be used to apply (BPS or IPS) patches. It is intended particularly for use with ROM
hacks.

## Installation

```shell
pip install vidua
```

## Usage

A simple script is included to validate or apply patches from the command line:

```shell
vidua patch.bps original.rom patched_output.rom
```

Full usage instructions:

```shell
$ vidua --help
usage: vidua [-h] [-v] [-q] PATCH [ORIGINAL] [OUTPUT]

Apply or validate patches.

positional arguments:
  PATCH           the patch file
  ORIGINAL        the file to be patched
  OUTPUT          filename to write patched file

optional arguments:
  -h, --help      show this help message and exit
  -v, --validate  validate the patch only; do not apply it
  -q, --quiet     suppress output except errors
```

Vidua may also be used as a library, to validate or apply patches from within
another program:

```python
from vidua import bps

patch = open('patch.bps', 'rb')
original = open('original.rom', 'rb')

with open('patched.rom', 'wb') as patched:
    patched.write(bps.patch(original, patch).read())
```

If the file is very large, you may prefer to use `shutil.copyfileobj` when
writing to disk.

## Credits

Alcaro's [Floating IPS](https://www.smwcentral.net/?p=section&a=details&id=11474)
was very useful in working out how to handle BPS files when byuu's documentation
was unclear.

![Test](https://github.com/sopoforic/vidua/actions/workflows/test.yml/badge.svg?event=push)
