Skip to content

Repository files navigation

Looper

Download Version CI License: MIT Swift macOS

Status Tests Build

Minimal native macOS video player — gapless loop, instant open, QuickTime-style scrub.

Double-click or Open With from Finder. Set as the default player with Get Info → Change All. Multiple videos at once. Plays locally with AppKit + AVFoundation only.

↓ Download Looper.dmg · All releases

Features

  • Gapless loopingAVQueuePlayer + AVPlayerLooper
  • Instant open — parallel size + playable probe; native resolution window
  • Dockless document player — Stays hidden from the Dock (LSUIElement); Finder Open With / Get Info → Change All. Yellow or ⌘M hides a video in the menu-bar list; select it there to restore. Closing the last window quits the app. The menu-bar extra lists open windows, recent files, and Quit Looper (⌘Q) while a loop is open.
  • Multi-window — cascade placement + per-file frame memory
  • Transparent title bar — video shows behind the window controls instead of a solid gray strip
  • Glass-capsule timeline — scrub bar in a rounded capsule fixed beneath the video (never overlays the picture); scroll to seek
  • Drop onto a window — replaces the current clip; extra files open in new windows
  • Apple Silicon native — arm64 only · zero external dependencies · HDR/EDR only when the file is HDR
  • Formatsmp4, mov, m4v via AVFoundation. mkv is registered for Open With but often cannot play (no FFmpeg)

Install

  1. Download Looper.dmg
  2. Open the DMG and drag Looper.app to /Applications
  3. First launch — right-click → Open if Gatekeeper prompts (ad-hoc signed build)
  4. Optional default: select a video → Get Info → Open with LooperChange All (once per type: mp4, mov, m4v, …)

Requires macOS 14+ on Apple Silicon.

Keyboard shortcuts

Focus the video window first.

Key Action
⌘Q Quit Looper
⌘M Hide focused video in the menu bar; select it there to restore
Space Pause / resume
F8 Pause / resume (media key)
F7 / F9 Hold to scrub backward / forward; release to stop
Volume up / down / mute Looper volume (not system volume)
M Mute / unmute
1 Toggle 50% ↔ 100% speed (shown on the speed circle)
L Rotate counter-clockwise 90° (display only)
Return Close this window
0 Reset speed to 100%
/ Scrub rewind / forward (hold to scrub continuously across clip)
/ Volume up / down

Scroll on the video: up/right = forward · down/left = rewind.

Drop a video onto a playing window to replace it. Extra files in the same drop open in new windows.

Development

xcodebuild -project Looper.xcodeproj -scheme Looper -configuration Release \
  -derivedDataPath build/DerivedData -arch arm64 build
./scripts/install-to-applications.sh

Release DMG (shared .razorcore branding + locked DMG layout):

./scripts/build-mac.sh
# or from Apps/:  uv run --project .razorcore razorbuild Looper

Output: build/Release/Looper.dmg (no loose .app in the repo).

See BUILD_AND_RELEASE.md.

Set as default player

  1. Right-click a video → Get Info
  2. Open With → Looper → Change All…

Docs

License

MIT — see LICENSE. Copyright © 2026 RazorBackRoar

If you need me, give me a holler.

Releases

Packages

Used by

Contributors

Languages