Native Swift Β· 100% offline Β· Fully sandboxed Β· Open source (MIT)
β¬οΈ Download for macOS Β· π Product page Β· π Report a bug Β· β Star the repo
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.
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.
- πͺ 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.
- Go to the latest release.
- Download
Video2Live.dmg. - Open the DMG and drag Video2Live.app into your Applications folder.
- 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.
git clone https://github.com/GavinHarbus/Video2Live.git
cd Video2Live
open Video2Live.xcodeprojIn Xcode, select your development team under Signing & Capabilities (required for Photos library access), then press Cmd + R.
- Load a video β drag and drop a video onto the app window, or click Choose File. Supports formats that macOS can decode.
- 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.
- Pick your moment (videos > 5s only) β drag the timeline scrubber to choose the 3-second segment you want as your Live Photo.
- 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.identifierandstill-image-timetags - 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
- 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.
- π± 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
.mp4family 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.
| 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.
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' testVideo2LivePhoto 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.
./scripts/build-dmg.shThis archives, exports, and creates build/Video2Live.dmg with a drag-to-Applications layout β ready to share.
- "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 runxattr -cr /Applications/Video2Live.app.
Still stuck? Open an issue β happy to help.
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.
MIT Β© Gavin Schnee Studio