TLDR how is that bad?
Well, if you encode at high bit depth, the removal of the noise won't create visible banding (at most barely visible at 10 bpc, completely invisible at 12bpc), which was my point. But the generated noise can still prevent banding during playback in case the player doesn't dither (which they usually don't by default).
Denoise-noise-level sets a denoise strength, which affects the denoising done on every frame in case of denoise-noise-level > 0. The denoised frame is then compared with the unaltered frame in some (sadly very unsuitable) way, and then noise is generated based on that calculated difference, and applied to the frame after it is encoded. Because the implementation is so shitty, the visual energy removed during denoising, and the visual energy added with noise synthesis, can diverge drastically.
So, no matter what denoise-noise-level you choose, the result will be far from optimal. And stronger levels won't just create unnecessary noise, but also create ugly grain patterns, which can become quite obvious beyond denoise-noise-level 10 or so.
If AV1 noise synthesis "removes" banding, that banding was never part of the video in the first place, but your video player system created it during bit depth reduction, since you're viewing on an 8-bit display. This can be prevented with dithering, which AV1 noise synthesis can substitute for.
Another aom psy fork, by me, utilizing patches from the unmaintained psy fork and its popular lavish fork, as well as original changes. It's overall closer to mainline, as I have decided against applying a lot of patches that I found to be more harmful than beneficial for efficiency when applied to current mainline aomenc. If you're missing parameters from aomenc-lavish, please request them with a short explanation, I might add them, currently I have only applied those that I am interested in using myself. Other suggestions are welcome as well.
I plan to frequently merge mainline changes into this fork.
Defaults are much improved, something like a simple --end-usage=q --threads=16 --tune-content=psy --cpu-used=4 --cq-level=20
should provide very good results.
Webm is just a video container, not a format. WebP uses quite outdated image compression from the VP8 video codec, which may perform quite a bit better than JPEG at very low quality, but at near-transparent quality, which images are usually encoded to, it very often doesn't even beat JPEG.
It's entirely an encoder issue...