Skip to content
Spectral painter for use with anything that can do FM audio broadcasts
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.

Amplitude Painter

Spectral painter for use with anything that can do FM audio broadcasts. Tested with rpitx's pifm tool.


This is a stack project.

stack setup    #Install GHC if needed

stack build    #Build amppaint. Go get a cup of coffee while you wait.

stack install  #Install amppaint to $HOME/.local/bin


amppaint <infile> <outfile>

where your input is any image file (format does not matter as long as it can be read by JuicyPixels), and your output is a WAV file.

Your input image is expected to be a monochrome image. If it's not, amppaint will try to convert it to monochrome by taking the brightness of each pixel, keeping any brighter than 50% and rejecting any darker than 50%.

For best results, convert your image to monochrome manually before handing it over to amppaint.

Additionally, I use a width of 960px for a nice resolution. The wider your image, the larger your FFT will need to be, and the lower your waterfall update rate will need to be to view it properly, so don't go too insane with it.

NOTE: This tool is designed for waterfall views which scroll from top to bottom. If your tool scrolls from bottom to top you'll need to flip your image before processing it.


Head over to the rpitx page and follow the instructions for converting/transmitting with pifm. Tune in to the frequency with a tool that can view the waterfall like GQRX, and see your image. You may need to zoom in quite a bit to see it. make sure to use a high FFT size.

For GQRX, I generally start with

  • FFT Size: 65536
  • Rate: 20fps (or 25fps)
  • Zoom: 16x

and then mess with the rate and zoom as needed to fix up the aspect ratio while looking good.

You can’t perform that action at this time.