I’d recommend frigate for basic recording features. Its human detection is pretty bad even with compute, but recording and transcoding is very solid. It can be self hosted as standalone. Been using one for a few months now and it’s rock solid. Only downside is that you have to configure it via yaml.
Another solution I can recommend, especially if you want to more easily integrate with HomeKit or any of the other smart home providers is Scrypted. It’s more UI centric and covers all the same bases as frigate, though slightly more resource intensive.