If you have any questions, or just want to chat, join us on Discord.
It is highly recommended to read the report to get a light introduction to Game Boy emulation. But do be aware, that the Python implementation has changed a lot. The report is relevant, eventhough you want to contribute to another emulator, or create your own.
If you've read the report and want more explicit details, have a look at the Pan Docs.
If you are looking to make a bot or AI, you can find all the external components in the PyBoy Documentation. There is also a short example on our Wiki page Scripts, AI and Bots as well as in the examples directory. If more features are needed, or if you find a bug, don't hesitate to make an issue here on GitHub, or post on our Discord channel.
Rewind any game |
Beat world records |
Train with Reinforcement Learning |
The instructions are simple if you already have a functioning Python environment on your machine.
- Install PyBoy using
pip install pyboy
(add--user
if your system asks) - If your system isn't supported by pysdl2-dll, you'll need to install SDL2 from your package manager.
If you need more details, or if you need to compile from source, check out the detailed installation instructions. We support: macOS, Raspberry Pi (Raspbian), Linux (Ubuntu), and Windows 10.
Now you're ready! Either use PyBoy directly from the terminal $ pyboy file.rom
or use it in your Python scripts:
from pyboy import PyBoy
pyboy = PyBoy('ROMs/gamerom.gb')
while not pyboy.tick():
pass
pyboy.stop()
Or using the context manager:
from pyboy import PyBoy
with PyBoy('ROMs/gamerom.gb') as pyboy:
while not pyboy.tick():
pass
When the emulator is running, you can easily access PyBoy's API:
from pyboy import WindowEvent
pyboy.send_input(WindowEvent.PRESS_ARROW_DOWN)
pyboy.tick() # Process one frame to let the game register the input
pyboy.send_input(WindowEvent.RELEASE_ARROW_DOWN)
pil_image = pyboy.screen_image()
pil_image.save('screenshot.png')
The Wiki shows how to interface with PyBoy from your own project: Wiki.
Thanks to all the people who have contributed to the project!
- Asger Anders Lund Hansen - AsgerLundHansen
- Mads Ynddal - baekalfen
- Troels Ynddal - troelsy
- Kristian Sims - krs013
- Rewind Time: Jacob Olsen - JacobO1
- Link Cable: Jonas Flach-Jensen - thejomas
- Game Boy Color: Christian Marslev and Jonas Grønborg - CKuke and kaff3
Any contribution is appreciated. The currently known problems are tracked in the Issues tab. Feel free to take a swing at any one of them.
For the more major features, there are the following that you can give a try. They are also described in more detail in the project list in the Wiki:
- Link Cable
- (Experimental) AI - use the
botsupport
or game wrappers to train a neural network - (Experimental) Game Wrappers - make wrappers for popular games
If you want to implement something which is not on the list, feel free to do so anyway. If you want to merge it into our repo, then just send a pull request and we will have a look at it.