Thanks for the great feedback, guys! =)
Elliot, the performance is much better than the old flash filters, because all the hard work is executed on the GPU.
When you add a filter to an object, it is first rendered into a RenderTexture, in stage coordinates. Then a fragment shader runs over that texture and draws its output on the stage.
Blur filters work like this: you need one draw call per direction and per blur unit. That means:
blurX = 0.5, blurY = 0.5 -> 2 draw calls (1+1)
blurX = 1.0, blurY = 1.0 -> 2 draw calls (1+1)
blurX = 1.5, blurY = 1.5 -> 4 draw calls (2+2)
blurX = 2.0, blurY = 2.0 -> 4 draw calls (2+2)
blurX = 1.0, blurY = 2.0 -> 3 draw calls (1+2)
However, instead of raising the blur value, you can also go down with the resolution:
new BlurFilter(1.0, 1.0, 0.5);
The last parameter is the resolution. If your object was 200x200 pixels, it will be rendered in a 100x100 texture, and that texture will be blurred. That looks great most of the time, and means you've got a much higher blur, while still using only 2 render passes.
As for the additional filters, I don't know yet -- but everything is possible with this system! =) Furthermore, they are so easy to write that I expect many users to create and share them.
E.g. if you've played around with GPUImage, it's very easy to port those over to Starling now.