I've downloaded saharan's repo and poked around the Life Universe project in Chrome and FF— it seems that the pixels representing the compressed animation are retrieved through a Context2D::drawImage call, and are different in Firefox and other browsers.
It makes sense that ETP would mess with the pixels output from a drawImage call, to fight fingerprinting.
Maybe the ImageLoader can be replaced with a more direct PNG decoder stapled to a fetch(). If I can make that work tonight, I'll create a pull request; this is how I meet the coolest people.