Cleanup: combine image + events refactor

This is #7370 rebased on top of #7427, ready for review.