Wrap screen recordings in a beautiful device frame, adjust the pacing, add cinematic zoom and tap 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.
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.
- Visible tap feedback with Ripple, Pulse, and Ring styles so viewers can follow every press.
- Direct tap placement on the device screen, with timing, color, and size controls in a dedicated timeline track and editor panel.
- Smoother zoom editing with a continuous live preview while dragging and timeline snapping when the drag ends.
- Editor reliability improvements, including a settings sidebar that remains fully accessible in compact windows.
- Drop a 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, iPad Pro 11" (landscape), and MacBook Pro 14. The iPhones include their 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 device 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 device on the canvas via slider + drag.
- Optional drop shadow under the device with controls for color, blur, X/Y offset, and opacity.
A single picker, five modes:
- None β Photoshop-style checkered preview, exports to
.movwith 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.
Like shots.so for Mac:
- Bottom track: live video thumbnails strip.
- Trim the recording with draggable in/out handles, or mark the range from the playhead with I and O.
- Speed track: mark any part of the recording and play it from 0.25Γ to 4Γ, with presets for common slow-motion and fast-forward rates.
- Speed segments have draggable edges, a dedicated right-side editor, rate-aware live playback, and synchronized audio/video export.
- Zoom 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.
- Add a tap event at the playhead, click the device screen to position it, then choose Ripple, Pulse, or Ring and customize its timing, color, and size.
- Tap events have their own draggable timeline track and render identically in the live canvas and exported video.
- Drag a block to move it; drag the edges to resize. Zoom events preview continuously while moving and settle to 0.25 s intervals or the nearby playhead when the drag ends.
- Live tooltips show timestamps while dragging.
- The playhead is scrubbable.
- Selecting a zoom or tap event opens an inline right-side editor panel so every change updates the canvas in real time β no modal, no lost context.
| 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 |
Five pre-baked combinations of scale + focus + duration + curve, each with a looping visual preview: Quick Punch, Dramatic, Top Focus, Bottom Focus, and Soft Reveal.
- With background β 1080Γ1080 (or your aspect)
.mp4, H.264. Drop straight into Reels / TikTok / Shorts. - Transparent (background set to None) β
.movwith HEVC + alpha channel. Composite the framed device over any UI inside anotherAVPlayer/AVKitconsumer β perfect for in-app tutorials, Final Cut, Motion. - All speed changes, zooms, and tap animations bake into both exports.
| Key | Action |
|---|---|
| Space | Play / pause |
| M | Mute / unmute |
| β / β | Scrub Β±0.25 s |
| β§+β / β§+β | Scrub Β±1 s |
| I / O | Mark trim in / out at the playhead |
| β₯+β« | Reset trim |
| β« | Delete selected zoom, tap, or speed event |
| β+D | Duplicate selected zoom, tap, or speed event |
- SwiftUI + AppKit (custom
NSViewRepresentableforAVPlayerLayer) - AVFoundation:
AVMutableComposition, per-range time scaling, customAVVideoCompositing,AVAssetExportSession, manualAVAssetReader/AVAssetWriterpipeline 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)
- macOS 26.3 (Tahoe) or later
- Xcode 26.5 or later
- A screen recording in
.mp4/.movformat
git clone https://github.com/ronaldo-avalos/Maya.git
cd Maya
open Maya.xcodeproj
# In Xcode: βRThis 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.
Maya currently ships iPhone 17 Pro, 16 Pro, 15 Pro (each with multiple color variants), iPad Pro 11" (landscape), and MacBook Pro 14, 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 Air, portrait iPad orientations
- More MacBook sizes and desktop displays
- Older models (iPhone 14, 13, 12 family)
- Android devices (Pixel, Galaxy)
To add a frame:
- Drop transparent-screen PNG(s) into an appropriate group under
Maya/Assets.xcassets/β one imageset per color variant. - Register the model in
Maya/Models/DeviceFrame.swift(DeviceModel) with the frame aspect, normalized screen rect, corner radius, and aDeviceColorper variant. Append it toDeviceModel.all. - Submit a PR with a screenshot of the result. That's it.
- Undo / Redo for canvas, animations, and background changes (
βZ/ββ§Z). - Saved projects β persist a
.mayaprojdocument on disk so users can come back to a layout. - Automatic tap detection β parse screen-recording metadata, when available, to create tap events without manual placement.
- Tap presets β save and reuse a preferred style, color, size, and duration.
- Caption / annotation overlays with their own timeline track.
- Watermark toggle for users who want a "Made with Maya" footer.
- 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 history with thumbnail previews and quick access to recent renders.
- A keyboard shortcuts cheat sheet accessible from a menu item.
- More gradient and solid color presets that work for non-indigo brands.
- 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.
- Build and test checks on pull requests, alongside the existing release workflow.
- Unit tests for
AnimationSampler,DeviceFramecoordinate math, andBlurPosterCache.
- Fork the repo and create a feature branch:
git checkout -b feature/iphone-16-pro - Code the change. Try to match the existing style β small files, no unnecessary comments, single-responsibility views.
- Test locally (βR). Take a screenshot or short GIF showing the change.
- 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.
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, iPad, MacBook, 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
β βββ TapEvent Positioned press-feedback animation spec
β βββ SpeedSegment Source-anchored speed range + timeline mapping
βββ 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 device + 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)
β βββ TapEditorPanel Right panel for editing a selected tap event
β βββ SpeedEditorPanel Right panel for speed presets, rate, and source range
β βββ Timeline/ Ruler, video strip, zoom/tap/speed tracks, draggable playhead
βββ Assets.xcassets/ iPhone/iPad/MacBook frame PNGs + app icon
MIT β see LICENSE.
You can fork, use Maya in personal or commercial projects, and ship derived work. Attribution is appreciated but not required.
- The app's brand color
#6466FAborrows from the Tailwind/Indigo family. - iPhone 15 / 16 / 17 Pro, iPad Pro and MacBook 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.
