https://www.digikam.org/ does a lot of what you're looking for.
Not web based, and really starts to show its age.
Not web based, and really starts to show its age.