Skip to content

Latest commit

Β 

History

30 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

🎬 Video2LivePhoto

Turn any video into a real Live Photo β€” on macOS, in one click.

Native Swift Β· 100% offline Β· Fully sandboxed Β· Open source (MIT)

Download macOS License Stars

⬇️ Download for macOS Β· 🌐 Product page Β· πŸ› Report a bug Β· ⭐ Star the repo


πŸ‘€ Demo

demo.mp4

Drop a video β†’ pick a 3-second moment β†’ click convert β†’ it's already in your Photos app as a real Live Photo. That's it.


✨ Why Video2LivePhoto?

You found a perfect video clip β€” a sunset, a pet doing something hilarious, a beautiful drone shot β€” and you wish it could be your iPhone wallpaper or a Live Photo to share. Apple lets you set Live Photos as wallpapers and share them with the iconic press-to-play effect, but converting a regular video into a real Live Photo is surprisingly painful:

  • 🚫 Online converters upload your private videos to unknown servers.
  • 🚫 Most "Live Photo maker" apps cost money, are buggy, or strip your audio.
  • 🚫 Manual workflows require Shortcuts hacks, command-line tools, and a lot of patience.

Video2LivePhoto fixes all of that. It's a tiny, native macOS app that uses Apple's own frameworks (AVFoundation, Photos) to produce real Live Photos with the proper QuickTime metadata β€” the same kind iPhones produce β€” and drops them straight into your Photos library. No upload, no account, no subscription, no telemetry.


πŸš€ Features

  • πŸͺ„ One-click conversion β€” drag, drop, done.
  • 🎚 Interactive timeline scrubber β€” pick the perfect 3-second segment with thumbnail preview.
  • βœ‚οΈ Output framing β€” keep the original ratio or crop to 9:16, direction-aware 4:3 / 3:4, and 1:1 with adjustable positioning.
  • πŸ”Š Audio preserved β€” unlike most converters, your original audio stays in the Live Photo.
  • πŸ”‡ Optional mute β€” preview and export without the source audio when preferred.
  • πŸ“₯ Direct Photos library import β€” no Finder shuffle, no AirDrop dance.
  • πŸ“‚ Paired-file export β€” save the matching HEIC + MOV files to a folder when you do not want to use Photos.
  • βœ… Output validation β€” verifies pairing identifiers, cover timing, duration, and video encoding before saving.
  • πŸ”’ Fully sandboxed β€” runs inside the macOS App Sandbox; only sees the video you pick.
  • πŸ›‘ Photos Add-Only permission β€” Video2LivePhoto can save photos but cannot read your library.
  • πŸ“‘ 100% offline β€” zero network requests, zero analytics, zero tracking.
  • 🍎 Native Swift + SwiftUI β€” fast, lightweight, no Electron, no bundled Chromium.
  • πŸ†“ Free & open source β€” MIT licensed; audit, fork, and build it yourself.
  • πŸ“ Broad format support β€” accepts formats that macOS can decode, then writes a Photos-compatible H.264/AAC MOV.

⬇️ Install

Recommended: Download the DMG

  1. Go to the latest release.
  2. Download Video2Live.dmg.
  3. Open the DMG and drag Video2Live.app into your Applications folder.
  4. Launch it. On first run, macOS may ask you to confirm β€” go to System Settings β†’ Privacy & Security if needed.

Requirements: macOS 14.0 (Sonoma) or later. Apple Silicon and Intel Macs both supported.

Or build from source

git clone https://github.com/GavinHarbus/Video2Live.git
cd Video2Live
open Video2Live.xcodeproj

In Xcode, select your development team under Signing & Capabilities (required for Photos library access), then press Cmd + R.


🎯 Usage

  1. Load a video β€” drag and drop a video onto the app window, or click Choose File. Supports formats that macOS can decode.
  2. Frame your Live Photo β€” keep the original ratio or choose 9:16 / 4:3 (3:4 for portrait video) / 1:1, adjust the crop position, and choose whether to keep the source audio.
  3. Pick your moment (videos > 5s only) β€” drag the timeline scrubber to choose the 3-second segment you want as your Live Photo.
  4. Convert β€” click Convert to Live Photo. Video2LivePhoto will:
    • Extract a key frame from the middle of your selected range
    • Generate a HEIC still image with the proper Apple maker metadata
    • Encode an H.264/AAC MOV clip with the quicktime.content.identifier and still-image-time tags
    • Validate the generated pair before saving it
    • Import the paired files into your Photos library as a Live Photo
    • Or export the matching HEIC + MOV files from the overflow menu
  5. Enjoy β€” open Photos, find your new Live Photo, long-press it (or hover with Force Touch), and watch it animate. Set it as your wallpaper, share it on iMessage, or upload to Instagram.

πŸ’‘ Use cases

  • πŸ“± Wallpapers β€” turn cinematic clips into stunning iOS / iPadOS Live Wallpapers.
  • πŸ“Έ Social sharing β€” Live Photos look way cooler than static images on iMessage and Instagram.
  • 🎁 Memory archives β€” convert old .mp4 family footage into Live Photos for the Photos timeline.
  • πŸ›Ή Sports highlights β€” slow, looping moments make great Live Photos.
  • 🐢 Pet content β€” your dog's perfect 3 seconds, immortalized.
  • 🎨 Creators β€” build wallpaper packs to sell or share.

πŸ§ͺ How It Works

Step What happens
Analyze Reads video duration, resolution, and track info via AVURLAsset
Compose Applies the selected aspect ratio and crop position to preview, cover, and video
Extract Frame Uses AVAssetImageGenerator to capture a precise frame at the midpoint of your selection
Write HEIC Creates a HEIC image with kCGImagePropertyMakerAppleDictionary containing the shared content identifier UUID
Write MOV Exports the clip with com.apple.quicktime.content.identifier and com.apple.quicktime.still-image-time metadata so Photos recognizes it as a Live Photo pair
Validate Reads both generated files back and verifies their identifiers, timing, duration, and H.264 video track
Import Uses PHAssetCreationRequest to add the HEIC + MOV pair to your Photos library

A Live Photo is just a paired HEIC + MOV with matching metadata. Video2LivePhoto handles the entire pipeline correctly β€” frame extraction, metadata embedding, and Photos import β€” in one click.


πŸ—‚ Project Structure

Video2Live/
β”œβ”€β”€ Video2LiveApp.swift             # App entry point
β”œβ”€β”€ Models/
β”‚   β”œβ”€β”€ ConversionState.swift       # State machine for the conversion flow
β”‚   β”œβ”€β”€ VideoProject.swift          # Observable model holding video state
β”‚   └── VideoFraming.swift          # Shared crop geometry and output sizing
β”œβ”€β”€ Views/
β”‚   β”œβ”€β”€ ContentView.swift           # Root view with state-based switching
β”‚   β”œβ”€β”€ DropZoneView.swift          # Drag-and-drop + file picker
β”‚   β”œβ”€β”€ VideoPreviewView.swift      # AVPlayerView wrapper
β”‚   β”œβ”€β”€ TimelineScrubberView.swift  # Thumbnail strip with range selector
β”‚   β”œβ”€β”€ FramingControlsView.swift   # Aspect ratio and crop position controls
β”‚   └── ConvertButton.swift         # Convert button + progress indicator
β”œβ”€β”€ Services/
β”‚   β”œβ”€β”€ VideoAnalyzer.swift         # Video metadata analysis
β”‚   β”œβ”€β”€ HEICWriter.swift            # Key frame extraction + HEIC writing
β”‚   β”œβ”€β”€ MOVWriter.swift             # Video trimming + QuickTime metadata
β”‚   β”œβ”€β”€ LivePhotoGenerator.swift    # Conversion pipeline orchestrator
β”‚   β”œβ”€β”€ LivePhotoExporter.swift     # Collision-safe HEIC + MOV folder export
β”‚   β”œβ”€β”€ LivePhotoValidator.swift    # Post-generation metadata verification
β”‚   β”œβ”€β”€ VideoCompositionBuilder.swift # Shared preview and export composition
β”‚   └── PhotosImporter.swift        # Photos library import
└── Utilities/
    β”œβ”€β”€ MetadataConstants.swift     # Metadata key constants
    └── Errors.swift                # Error types
Video2LiveTests/                    # Unit and media-pipeline integration tests

Run the test suite with:

xcodebuild -project Video2Live.xcodeproj -scheme Video2Live -destination 'platform=macOS' test

πŸ” Permissions & Privacy

Video2LivePhoto requests the absolute minimum:

  • Photos Library (Add Only) β€” to save the generated Live Photo. Cannot read your existing library.
  • User-Selected File Access β€” reads the video you pick and writes only to an export folder you explicitly choose.

The app runs inside the macOS App Sandbox and never makes a network request. There is no analytics SDK, no telemetry, no crash reporter, nothing. Your videos never leave your Mac.

Read the full privacy policy.


πŸ“¦ Build a DMG yourself

./scripts/build-dmg.sh

This archives, exports, and creates build/Video2Live.dmg with a drag-to-Applications layout β€” ready to share.


πŸ›Ÿ Troubleshooting

  • "Photos library access was denied" β†’ System Settings β†’ Privacy & Security β†’ Photos β†’ enable Video2LivePhoto.
  • Conversion succeeded but the Live Photo doesn't animate β†’ Make sure the source has at least one video track. Pure-audio files or some screen recordings may not work.
  • A format will not open β†’ The source codec must be decodable by AVFoundation. Try converting the source to H.264 or HEVC first.
  • App is "damaged" / unsigned warning β†’ Right-click Video2Live.app β†’ Open β†’ confirm. Or run xattr -cr /Applications/Video2Live.app.

Still stuck? Open an issue β€” happy to help.


πŸ™Œ Support the project

If Video2LivePhoto saved you time, please:

  • ⭐ Star this repo β€” it really helps others discover it.
  • 🐦 Share it on X / 小纒书 / Threads β€” tag with #Video2LivePhoto.
  • πŸ› File issues and feature requests.
  • πŸ”§ Pull requests welcome β€” see Project Structure to get oriented.

Want more native, privacy-first tools for creators? Check out the rest of Gavin Schnee Studio.


πŸ“„ License

MIT Β© Gavin Schnee Studio

About

🎬 macOS app to convert videos (MOV/MP4/MKV...) into real Apple Live Photos in one click. Native Swift, fully offline, sandboxed, audio preserved. Free & open source.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages