Convert a user-provided MP4 video into a verified standard Android Motion Photo (often called Android Live Photo): a JPEG cover with the original MP4 embedded and Google Motion Photo XMP metadata. Use when users ask to turn a video into a Live Photo, dynamic photo, Motion Photo, or social-media-compatible Android live image.
Scanned 9/5/2026
Install to Claude Code
npx -y skills add wangjs-jacky/jacky-skills --skill android-live-photo --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Android Live Photo?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/wangjs-jacky-android-live-photo)More formats (shields.io, HTML) on the badges page.
---
name: android-live-photo
description: "Convert a user-provided MP4 video into a verified standard Android Motion Photo (often called Android Live Photo): a JPEG cover with the original MP4 embedded and Google Motion Photo XMP metadata. Use when users ask to turn a video into a Live Photo, dynamic photo, Motion Photo, or social-media-compatible Android live image."
---
# Android Live Photo
Create an Android/Google Motion Photo from a supplied MP4. The output is one untouched `.jpg` binary containing a JPEG cover, standard XMP metadata, and the original MP4 bytes.
## Workflow
1. Use the exact video attachment path supplied by the user. Do not scan attachment folders.
2. Run `ffprobe` on the MP4. Stop and report the issue if it has no readable video stream or duration.
3. Run the bundled script, defaulting the cover to the midpoint:
```sh
node scripts/convert_motion_photo.mjs \
--input /absolute/input.mp4 \
--output /absolute/output_MP.jpg
```
Use `--cover-at <seconds>` only when the user specifies a preferred cover moment.
4. Trust completion only after the script reports `validation: passed`. It verifies JPEG SOI, Motion Photo XMP, declared embedded-video length, MP4 signature, and byte-for-byte equality of the embedded MP4 with the source.
5. State the output path and compatibility boundary: the result has worked with social platforms that recognize standard Android Motion Photos; Honor Gallery may not register imported generic Motion Photos as native Live Photos.
## Delivery
Do not send the dynamic JPEG through an image renderer or editor: recompression strips the embedded MP4 and turns it into a static image. Preserve the exact generated binary. If the environment supports general file attachment, send it unchanged; otherwise provide the absolute output path or package it in an untouched archive using the available file-delivery mechanism.
## Requirements
Require Node.js 20+, `ffmpeg`, and `ffprobe` on `PATH`. The script supports MP4 input only and does not alter source media.
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!