Skip to content

ronaldo-avalos/Maya

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

13 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Maya app icon

Maya

Wrap your iPhone screen recordings in a beautiful device frame, add cinematic zoom moments, and export ready-to-share videos.

A native macOS app for turning raw screen recordings into polished marketing clips, social-media posts, and in-app tutorial overlays.

Maya screenshot


⬇️ Download

Download Maya for macOS Β· Website

Requires macOS 26.3 (Tahoe) or later. Maya is signed with a Developer ID and notarized by Apple β€” it opens with a normal double-click, no security workaround needed.

Want the latest unreleased changes? Build from source. Maintainers: see RELEASING.md.


✨ Features

🎬 Device framing

  • Drop an iPhone screen recording β€” Maya wraps it in a clean device mockup with the correct screen cutout and corner radius.
  • Multiple devices: iPhone 17 Pro, iPhone 16 Pro, iPhone 15 Pro, each with their official titanium color variants (Cosmic Orange, Deep Blue, Silver, Natural / Black / White / Desert Titanium…). Switch model and color from the sidebar in one click.
  • Generic mode: a brand-agnostic frame with user-defined bezel width and bezel color.
  • No frame mode: ship the bare screen recording with rounded corners only.
  • A corner radius slider appears in Generic / No-frame modes so you can dial from sharp to stadium.
  • The framed phone lives inside a configurable canvas β€” 1:1, 9:16, 4:5, 4:3 landscape, 16:9 widescreen β€” so you can target Reels, Shorts, TikTok, YouTube, X, or in-app overlays from a single source.
  • Manually scale and reposition the phone on the canvas via slider + drag.
  • Optional drop shadow under the phone with controls for color, blur, X/Y offset, and opacity.

🎨 Backgrounds

A single picker, five modes:

  • None β€” Photoshop-style checkered preview, exports to .mov with HEVC + alpha.
  • Solid β€” brand-aligned palette + custom hex.
  • Gradient β€” eight curated brand presets, all derived from the app's official color (#6466FA).
  • Image β€” drop in any image, scale-to-fill.
  • Video Blur β€” Keynote-style blurred poster of your own video as the backdrop.

⏱ Timeline & zoom animations

Like shots.so for Mac:

  • Bottom track: live video thumbnails strip.
  • Top track: hover anywhere to drop a zoom event with a + affordance.
  • Each zoom event has a start, duration, scale, focus (Top / Center / Bottom), independent zoom-in / zoom-out timing, and a chosen animation curve.
  • Drag the block to move it; drag the edges to resize. Everything snaps to 0.25 s intervals and to the playhead when nearby.
  • Live tooltips show timestamps while dragging.
  • The playhead is scrubbable.
  • Selecting a zoom event opens an inline right-side editor panel so every slider tweak updates the canvas in real time β€” no modal, no lost context.

πŸŒ€ Six animation curves

Curve Feel
Spring Soft overshoot, lively (default)
Bouncy More overshoot, playful
Smooth Classic ease in/out
Snappy Fast attack, slow settle
Gentle Soft and organic
Linear Constant rate, mechanical

πŸš€ One-click presets

Pre-baked combinations of scale + focus + duration + curve: Subtle Pop, Quick Punch, Dramatic, Top Focus, Bottom Focus, Long Hold, Mechanical, Soft Reveal.

πŸ“€ Smart export

  • With background β†’ 1080Γ—1080 (or your aspect) .mp4, H.264. Drop straight into Reels / TikTok / Shorts.
  • Transparent (background set to None) β†’ .mov with HEVC + alpha channel. Composite the framed phone over any UI inside another AVPlayer / AVKit consumer β€” perfect for in-app tutorials, Final Cut, Motion.
  • All zoom animations bake into both exports.

⌨️ Keyboard shortcuts

Key Action
Space Play / pause
M Mute / unmute
← / β†’ Scrub Β±0.25 s
⇧+← / ⇧+β†’ Scrub Β±1 s
⌫ Delete selected zoom event
⌘+D Duplicate selected zoom event

πŸ›  Tech stack

  • SwiftUI + AppKit (custom NSViewRepresentable for AVPlayerLayer)
  • AVFoundation: AVMutableComposition, custom AVVideoCompositing, AVAssetExportSession, manual AVAssetReader / AVAssetWriter pipeline for HEVC + alpha
  • Core Image + Metal for per-frame compositing
  • VideoToolbox for HEVC-with-alpha encoder properties
  • Swift Concurrency (@Observable, actors, async/await) β€” export runs on a dedicated actor so the UI never blocks
  • App Sandbox with file hard-link/copy adoption strategy (videos are brought into the sandbox container on load so AVFoundation reads work from any thread)

Requirements

  • macOS 26.3 (Tahoe) or later
  • Xcode 26.5 or later
  • An iPhone screen recording in .mp4 / .mov format

Build & run

git clone https://github.com/ronaldo-avalos/Maya.git
cd Maya
open Maya.xcodeproj
# In Xcode: ⌘R

🀝 Contributing β€” Maya is open source

This project is in active development and contributions are very welcome. Whether you're an iOS/macOS dev, a designer, or someone who just loves polished tools, there's a place for you.

High-impact contribution areas

πŸ“± More device frames

Maya currently ships iPhone 17 Pro, 16 Pro, and 15 Pro (each with multiple color variants), plus a configurable Generic frame and a No-frame mode. PRs that add more devices are very welcome:

  • iPhone 16 / 16 Plus, iPhone 15 / 15 Plus
  • iPhone SE
  • iPad mini / iPad Pro
  • Older models (iPhone 14, 13, 12 family)
  • Android devices (Pixel, Galaxy)

To add a frame:

  1. Drop transparent-screen PNG(s) into Maya/Assets.xcassets/iphone frames/ β€” one imageset per color variant.
  2. Register the model in Maya/Models/DeviceFrame.swift (DeviceModel) with the frame aspect, normalized screen rect, corner radius, and a DeviceColor per variant. Append it to DeviceModel.all.
  3. Submit a PR with a screenshot of the result. That's it.

🎯 Feature ideas (good first issues)

  • Undo / Redo for canvas, animations, and background changes (⌘Z / βŒ˜β‡§Z).
  • Saved projects β€” persist a .mayaproj document on disk so users can come back to a layout.
  • Animation presets gallery β€” visual previews of each preset playing on a sample phone in the editor sheet.
  • Trim controls on the video track (drag in/out points to crop the recording).
  • Click-spot animations β€” automatically zoom toward where the user tapped in the screen recording (parse the .mp4 metadata if available, or expose a click-to-mark workflow).
  • Caption / annotation overlays with their own timeline track.
  • Watermark toggle for users who want a "Made with Maya" footer.

🎨 Design / UX polish

  • A more refined empty state for the canvas before any video is loaded.
  • A welcome screen with recent projects.
  • Onboarding tooltips for first-launch.
  • An export progress sheet with thumbnail preview of the result.
  • A keyboard shortcuts cheat sheet accessible from a menu item.
  • More gradient and solid color presets that work for non-indigo brands.

πŸ› Engineering improvements

  • More iPhone screen orientations (currently the compositor assumes portrait recordings).
  • HDR pass-through for HDR screen recordings.
  • Audio waveform rendering on the timeline.
  • Apple Silicon performance profiling of the export pipeline.
  • CI with GitHub Actions (build + lint).
  • Unit tests for AnimationSampler, DeviceFrame coordinate math, and BlurPosterCache.

How to contribute

  1. Fork the repo and create a feature branch: git checkout -b feature/iphone-16-pro
  2. Code the change. Try to match the existing style β€” small files, no unnecessary comments, single-responsibility views.
  3. Test locally (⌘R). Take a screenshot or short GIF showing the change.
  4. Open a PR with a clear title, a short description, and the screenshot/GIF.

For larger features, open an issue first so we can align on the approach before you spend hours on it.

Code map

Maya/
β”œβ”€β”€ MayaApp.swift                 App entry
β”œβ”€β”€ ContentView.swift             Root β†’ EditorView
β”œβ”€β”€ Models/                       State + value types
β”‚   β”œβ”€β”€ Project                   Root @Observable state (video, canvas, devices, shadow, animations…)
β”‚   β”œβ”€β”€ DeviceFrame               DeviceModel + DeviceColor catalog (iPhone Pro family, Generic, None)
β”‚   β”œβ”€β”€ CanvasAspectRatio         1:1, 9:16, 4:5, 4:3, 16:9 β€” pixel sizes + chip metadata
β”‚   β”œβ”€β”€ PhoneShadow               Drop-shadow parameters (color, blur, offsets, opacity)
β”‚   β”œβ”€β”€ BackgroundOption          Solid / gradient / image / video-blur / transparent
β”‚   └── ZoomSegment               Per-segment zoom animation spec
β”œβ”€β”€ Services/                     AVFoundation + Core Image plumbing
β”‚   β”œβ”€β”€ DeviceFrameCompositor     Custom AVVideoCompositing (per-frame compositing)
β”‚   β”œβ”€β”€ ExportService             Actor that runs both .mp4 and .mov exports
β”‚   β”œβ”€β”€ AnimationSampler          Envelope math for zoom segments
β”‚   β”œβ”€β”€ BlurPosterCache           One-shot blurred-frame cache
β”‚   └── VideoThumbnailGenerator   Async timeline thumbnails
β”œβ”€β”€ Views/                        SwiftUI views
β”‚   β”œβ”€β”€ EditorView                Top-level layout (sidebar / canvas / timeline / editor panel)
β”‚   β”œβ”€β”€ CanvasView                Configurable-ratio canvas with framed phone + background
β”‚   β”œβ”€β”€ FramedDeviceView          Composite of video + frame overlay + shadow
β”‚   β”œβ”€β”€ BackgroundPicker          Mode tabs + per-mode controls
β”‚   β”œβ”€β”€ SettingsSidebar           Left sidebar (recording, canvas, device, transform, background, shadow, export)
β”‚   β”œβ”€β”€ AnimationEditorSheet      Right panel for editing a selected zoom event (live preview)
β”‚   └── Timeline/                 Ruler, video strip, animations track, draggable playhead
└── Assets.xcassets/              iPhone frame PNGs + app icon

πŸ“„ License

MIT β€” see LICENSE.

You can fork, use Maya in personal or commercial projects, and ship derived work. Attribution is appreciated but not required.


πŸ™ Acknowledgements

  • The app's brand color #6466FA borrows from the Tailwind/Indigo family.
  • iPhone 15 / 16 / 17 Pro frame PNGs generated by the project owner.
  • Built with ❀️ on macOS Tahoe.

If Maya helps you ship a video, tag @ronaldo-avalos β€” we'd love to see it.

About

πŸ–₯️ πŸ“± ▢️ Wrap your iPhone screen recordings in a beautiful device frame, add cinematic zoom moments, and export ready-to-share videos.

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors