A tool for generating NES graphics from pixel art images.

Windows exe - 1.3.1
md5: 26383d15365608c19b3ffbe8074007f9
sha1: 929e1b8753baa17723030f91498c7b2f4cdb1c00

How to build homebrew - Blog post

Source - Github

Python package - PyPi


Makechr takes 256x240 pixel images, and creates the necessary component files (chr, nametable, attribute, palette) to recreate those images on the NES. Additionally, it can create views to help visualize how NES graphics work.

For example, here's a graphic used in the homebrew game Star Versus.

makechr can automatically detect the palette it needs to use:

as well as collect all the necessary CHR data:

or produce a visualization of which blocks use which palettes:

There's lot of options for makechr, many of which can be used to precisely control the memory layout of the data that makechr produces. For example, the "-s" option treats the image as sprite data, which changes how the palette is laid out, where CHR data gets stored, and how restrictive the colors need to be. See the README file for full documentation.

For a more detailed explanation of how NES graphics work, see my blog series on the subject.

Running GUI on OSX using virtualenv

Running makechr's gui on OSX takes a little bit of work. Installing wx the normal way, using pip inside of virtualenv, doesn't quite work. Instead, wxpython needs to be installed globally, and hacked a bit.

Get the source for makechr, using git

git clone

Use brew to isntall wx, globally:

brew install wxpython

Change directory into the virtualenv:

cd venv/lib/python2.7/site-packages

And link the global wx library here:

ln -s /usr/local/lib/python2.7/site-packages/wx.pth wx.pth
ln -s /usr/local/lib/python2.7/site-packages/wx-3.0-osx_cocoa wx-3.0-osx_cocoa

Create a script at venv/bin/wxpy, with the following contents:


# what real Python executable to use

# find the root of the virtualenv, it should be the parent of the dir this script is in
ENV=`$PYTHON -c "import os; print os.path.abspath(os.path.join(os.path.dirname(\"$0\"), '..'))"`

# now run Python with the virtualenv set as Python's HOME
exec $PYTHON "$@"

Set the script to be executable:

chmod a+x wxpy

Then the gui can be run using