I started with Chrome in the web process

2-5 seconds per screenshot, hundreds of MB per instance

class Render::Base < ApplicationModel
  def request
    validate!
    self.class.browser.with_page do |page|
      page.resize(width:, height:)
      page.go_to(url)
      wait_for_page_ready(page)
      capture  # screenshot
    end
  end
end
10 / 45