ronaldo-avalos/Maya has 1,086 GitHub stars and 62 forks. GitHot measured +8 in 7 days. Last checked 2026-11-11 01:08 UTC. Last push 2026-08-23.
๐ฅ๏ธ ๐ฑ โถ๏ธ Wrap your iPhone screen recordings in a beautiful device frame, add cinematic zoom moments, and export ready-to-share videos.
Measured star growth
- in 24h
- Update delayed
- in 7 days
- +8
- in 15 days
- Collecting history
- in 1 month
- Collecting history
Net star changes over overlapping periods, not daily totals. Missing measurements are left blank. Stars measure attention, not software quality.
README.md
OriginalMaya
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
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.
๐ What's new in 1.1
- 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.
โจ Features
๐ฌ Device framing
- 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.
๐จ Backgrounds
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.
โฑ Timeline, speed, zoom & tap feedback
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.
๐ 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
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.
๐ค Smart export
- 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.
โจ๏ธ Keyboard shortcuts
| 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 |
๐ Tech stack
- 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)
Requirements
- macOS 26.3 (Tahoe) or later
- Xcode 26.5 or later
- A screen recording in
.mp4/.movformat
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, 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.
๐ฏ Feature ideas (good first issues)
- 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.
๐จ 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 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.
๐ 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.
- Build and test checks on pull requests, alongside the existing release workflow.
- Unit tests for
AnimationSampler,DeviceFramecoordinate math, andBlurPosterCache.
How to contribute
- 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.
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, 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
๐ 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
#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.
Explore related projects
ytdl-org/youtube-dl
Command-line program to download videos from YouTube.com and other video sites
141,527 starsexcalidraw/excalidraw
Virtual whiteboard for sketching hand-drawn like diagrams
135,396 starsgodotengine/godot
Godot Engine โ Multi-platform 2D and 3D game engine
119,942 starsmrdoob/three.js
JavaScript 3D Library.
117,983 stars