Turns out SVG can draw images from text and is a valid favicon format supported by most major browsers.
Create a favicon.svg file. There are a lot of opinions on what size(s) to make your favicon,
but modern browsers support a 32x32 icon so we’ll use that. Just set the font-size to 32 and offset the y axis by the same amount, so the icon is visible:
<svg xmlns="http://www.w3.org/2000/svg">
  <text font-size="32" y="32">🖼</text>
</svg>
Then use it in your index.html:
<head>
  <link rel="icon" href="favicon.svg">
</head>
Here’s the commit implementing the emoji favicon on this site.