If you have any questions, or just want to chat, join us on Discord.
| Train RL agents to play Pokemon Red | Rewind any game |
|
|
||
| Play the classics |
Create your own AI |
Teach Mario to win |
|
|
|
The instructions are simple:
$ pip install pyboyFor platform-specific instructions, see the installation guide.
Now you're ready! Either use PyBoy directly from the terminal
$ pyboy game_rom.gbOr use it in your Python scripts:
from pyboy import PyBoy
pyboy = PyBoy('game_rom.gb')
while pyboy.tick():
pass
pyboy.stop()If you are looking to make a bot or AI, then these resources are a good place to start:
- PyBoy API Documentation
- Using PyBoy with Gym
- Example: Kirby
- Example: Tetris
- Example: Super Mario Land
- Code Examples
- Discord
When the emulator is running, you can easily access PyBoy's API:
pyboy.set_emulation_speed(0) # No speed limit
pyboy.button('down')
pyboy.button('a')
pyboy.tick() # Process at least one frame to let the game register the input
value_of_interest = pyboy.memory[0xC345]
pil_image = pyboy.screen.image
pil_image.save('screenshot.png')The documentation homepage shows how to interface with PyBoy from your own project.
Performance is a priority for PyBoy, to make your AI training and scripts as fast as possible.
The easiest way to improve your performance, is to skip rendering of unnecessary frames. If you know your character takes X frames to move, or the game doesn't take input every frame, you can skip those to potentially triple your performance. All game logic etc. will still process.
Here is a simple comparison of rendering every frame, rendering every 15th frame, and not rendering any frames (higher is better). See pyboy.tick for how it works. Your performance will depend on the game.



