Ah, I was looking at
https://www.gnu.org/software/emacs/manual/html_node/elisp/Pixel-Specification.html, this isn't documented but indeed it scales.
```elisp
#("" 0 1
(face all-the-icons-lpurple font-lock-face all-the-icons-lpurple fontified t display
(image :type svg :data "<svg viewBox=\"0 0 512 512\" width=\"512\" height=\"512\"> <path d=\"...snip...\"></path></svg>" :scale 1 :transform-smoothing t :width (1 . em) :ascent center :margin 1)
front-sticky nil rear-nonsticky t))
```
But this doesn't seem to work, I suppose px is not a unit?
```elisp
#("" 0 1
(face all-the-icons-lpurple font-lock-face all-the-icons-lpurple fontified t display
(image :type svg :data "<svg viewBox=\"0 0 512 512\" width=\"512\" height=\"512\"> <path d=\"...snip...\"></path></svg>" :scale 1 :transform-smoothing t :width (- (1 . em) (1 . px)) :ascent center :margin 1)
front-sticky nil rear-nonsticky t))
```
I like this approach a lot, but I do need pixel precision calculated on demand because I need to add a 1px margin between icons. If I don't subtract 2 px back from the dimensions, the icons will be wider than a character.