Skip to content

Add Android Motion Photo export for Live Photos #1705

Description

@ChrisVrekos

Summary

I’d like Memories to support exporting Live Photos as Android/Google Motion Photo JPEGs.

Memories already detects Live Photos and can download the still image and video part separately. This feature would add a single export option that combines them into one Android-compatible Motion Photo .jpg.

Use case

This helps users who want to move Live Photos from Apple/iCloud/Nextcloud workflows into Android or Google Photos workflows.

Instead of downloading:

  • IMG_1234.HEIC or IMG_1234.JPG
  • IMG_1234.MOV

the user could download:

  • IMG_1234MP.jpg

which Android/Google Photos can recognize as a Motion Photo.

Proposed UI

Add a Download Motion Photo action directly below the existing Download Video action in the Memories viewer for Live Photos.

Proposed behavior

  • JPEG stills are used directly.
  • HEIC/HEIF stills are converted to JPEG before export.
  • MOV/QuickTime live videos are transcoded to MP4 using the existing Memories video transcoding/go-vod path.
  • Existing embedded MP4 Motion Photos are reused when possible.
  • If an MP4 cannot be produced, the export should fail rather than generate a non-compliant file.

Format

The output follows Android’s Motion Photo format:

https://developer.android.com/media/platform/motion-photo-format

The generated JPEG contains:

  • XMP APP1 metadata with Camera:MotionPhoto="1"
  • Camera:MotionPhotoVersion="1"
  • Camera:MotionPhotoPresentationTimestampUs
  • Container:Directory
  • primary image/jpeg item
  • trailing video/mp4 item with exact Item:Length
  • MP4 bytes appended after the JPEG image

Prototype

I have a working prototype patch against Memories 8.1.0.

It adds:

  • a small MotionPhotoController
  • a OCA\Memories\Service\MotionPhoto service for export assembly
  • a viewer action under Download Video
  • HEIC/HEIF-to-JPEG conversion through Imagick
  • MOV-to-MP4 conversion through existing go-vod behavior

I tested it with an iPhone Live Photo pair:

  • source still: .jpg
  • source video: .mov
  • output: Android Motion Photo .jpg
  • verified XMP fields and exact trailing MP4 byte length/hash

Happy to open a PR if this is something the project would consider .
I would love it if somebody could help me with a way to test the code as it is my 1st time recommending a feature on anything and writing code for it.

Questions for maintainers:

  • Would this fit Memories as a built-in export action?
  • Should it be behind a config option?
  • Is Service\MotionPhoto the right place structurally, or would you prefer another service split?
  • Should HEIC conversion rely on Imagick, previews, or another existing Memories path?
  • Should their be a button when doing a multi-select of pictures to export them as motion pictures ?

Metadata

Metadata

Assignees

No one assigned

    Labels

    featureNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions