How to scale vector filed plots by the norm?

I am writing a plot recipe for plotting vector fields in a package. I would like to have an arrow plot where the maximum arrow length and arrow size are fixed in Pixel units and all the arrows have their tail length and arrow size proportional to the respective vector norm (this way I also avoid visual clutter from very small vectors).

From the docs I understand that lengthscale and arrowsize are in data units. Is there a way to give them in Pixel units? Or can I get the scene limits inside the type recipe to compute the required factors?

arrowsize affects just the triangle/cone part and is in pixel space in 2d. lengthscale is a multiplier to the directions you pass and affects the length of the line/cylinder part.

With lengthscale = 1 (default) the length of arrow tails is the norm of the directions. If you want the heads to also scale you could try something like arrowscale = lift(v -> 10norm(v), dirs).