Is there a workaround for this? Perhaps another filter can be used to
emulate anti-aliasing, or maybe I can somehow anti-alias the text
before the filter is applied?
This answer went into detail on the issue.
As a compromise solution, you can try:
- Choose less contrasting colors for the color of letters and background
- Apply the attribute
shape-rendering =" crispEdges"
to the font
- Choose a font that renders sharper edges
For example, your chosen font font-family =" cursive "
looks like this:

<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
width="400" height="600" viewBox="0 0 400 400" >
<text x="35" y="150" font-size="100px" fill="black" font-family="cursive"> HELLO </text>
</svg>
font-family = "Monotype Corsiva"
looks better

<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
width="400" height="200" viewBox="0 0 400 200" >
<rect width="100%" height="100%" fill="silver" />
<text x="35" y="120" font-size="100px" fill="#444444" shape-rendering="crispEdges" font-family="Monotype Corsiva" > HELLO </text>
</svg>
Applying an SVG filter to smooth jagged edges
- For the filter
feGaussianBlur
the parameters are selected (the last
row of the matrix) 0 0 0 29 -1
- For the filter
feComposite
operator="atop"
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
width="400" height="200" viewBox="0 0 400 200" >
<defs>
<filter id="f">
<feGaussianBlur in="SourceGraphic" stdDeviation="1" result="blur" >
</feGaussianBlur>
<feColorMatrix in="blur" type="matrix"
values="
1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 29 -1"
result="goo" />
<feComposite in="SourceGraphic" in2="goo" operator="atop"/>
</filter>
</defs>
<rect width="100%" height="100%" fill="silver" />
<text filter="url(#f)" x="35" y="120" font-size="100px" fill="#444444" shape-rendering="crispEdges" font-family="Monotype Corsiva" > HELLO </text>
</svg>
Filter animation
I'm animating the stdDeviation of the feGaussianBlur
As I understood from @aleclarson's comment you want to animate the filter attribute
<animate attributeName="stdDeviation" begin="0s" dur="8s"
repeatCount="indefinite" values="1;6;12;12;6;1;1" />
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
width="400" height="200" viewBox="0 0 400 200" >
<defs>
<filter id="f">
<feGaussianBlur in="SourceGraphic" stdDeviation="1" result="blur" >
<animate attributeName="stdDeviation" begin="0s" dur="8s" repeatCount="indefinite" values="1;6;12;12;6;1;1" />
</feGaussianBlur>
<feColorMatrix in="blur" type="matrix"
values="
1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 29 -1"
result="goo" />
<feComposite in="SourceGraphic" in2="goo" operator="atop"/>
</filter>
</defs>
<text filter="url(#f)" x="35" y="120" font-size="100px" fill="#111111" shape-rendering="crispEdges" font-family="Monotype Corsiva" > HELLO </text>
</svg>
Variant with value and operator = "xor"
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
width="400" height="200" viewBox="0 0 400 200" >
<defs>
<filter id="f">
<feGaussianBlur in="SourceGraphic" stdDeviation="1" result="blur" >
<animate attributeName="stdDeviation" begin="0s" dur="8s" repeatCount="indefinite" values="1;6;12;12;6;1;1" />
</feGaussianBlur>
<feColorMatrix in="blur" type="matrix"
values="
1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 29 -1"
result="goo" />
<feComposite in="SourceGraphic" in2="goo" operator="xor"/>
</filter>
</defs>
<text filter="url(#f)" x="35" y="120" font-size="100px" fill="#111111" shape-rendering="crispEdges" font-family="Monotype Corsiva" > HELLO </text>
</svg>