0a545f7fa5
vision_analyze rejected iPhone photos with 'source is not a recognized image'. iPhones capture HEIC (ISO-BMFF/HEVC) and upload pipelines often mislabel it .jpg; the magic-byte sniff had no HEIF branch, so the bytes were rejected before reaching normalization. - _detect_image_mime_type_from_bytes: sniff the ISO-BMFF 'ftyp' box and recognize HEIF/HEIC (heic/heix/heim/heis/hevc/hevx/mif1/msf1) and AVIF (avif/avis) brands, returning image/heic or image/avif. Non-image ftyp brands (mp4, ...) stay unrecognized. - _normalize_to_supported_image: register the pillow-heif Pillow opener, then re-encode HEIF/AVIF to PNG before embed (same soft-dependency pattern as SVG rasterization). Missing decoder yields an actionable 'pip install pillow-heif' error, not a generic failure. - Add pillow-heif==1.4.0 as a core dep alongside Pillow (prebuilt wheels bundle libheif; no system libs needed). - Tests: brand detection (incl. AVIF + mp4-not-misdetected), end-to-end HEIC->PNG normalization, and the decoder-missing error path. The vision resolver's magic-byte sniff stays authoritative (no extension trust); HEIF now reaches the existing normalize step instead of 400ing.