By: Michael Lynch <git@mtlynch.io>
Collapse duplicated animated-photo upload path ProcessableAnimatedPhoto was identical to ProcessablePhoto and built by the same resolution check, so the separate type, constructor, handler case, and process method only duplicated code. Use ProcessablePhoto for both kinds, select the converter by media type in the handler, and share the full-size write between ProcessPhoto and ProcessAnimatedPhoto. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>