My guess is that quantsmooth won't handle squares in the background well, but will be better at the edges (without excessive blurring).
Update: I tested it, it's about 10% quality, jpeg-quantsmooth doesn't handle this quality. At 25% quality - result is fine, starting at 20% and less - not good.
Perhaps the synthesis of all three projects combined into one (taking best of each) could give a great result.
So then...
jpeg2png: overblurs and slow
knusperli: does only deblocking, not removes artifacts
jpegqs: fails to deblock low frequencies (less 25% quality)
Also try with: https://github.com/ilyakurdyukov/jpeg-quantsmooth with "-q6" (default setting without luma-aware chroma upsampling)
My guess is that quantsmooth won't handle squares in the background well, but will be better at the edges (without excessive blurring).
Update: I tested it, it's about 10% quality, jpeg-quantsmooth doesn't handle this quality. At 25% quality - result is fine, starting at 20% and less - not good.
Perhaps the synthesis of all three projects combined into one (taking best of each) could give a great result.
So then...
jpeg2png: overblurs and slow
knusperli: does only deblocking, not removes artifacts
jpegqs: fails to deblock low frequencies (less 25% quality)