Webworker integration so generation isn't on the same thread