Drag a file. Tap Shift. Drop it onto a format.
A small, local file converter for macOS. Shift lives in your menu bar and opens a radial menu while you drag an image or PDF. Tap Shift again for crop, background and compression tools.
Watch the 12 second demo · Download the Mac app · MIT license
Download the ZIP from Releases, unzip it, and move Shift.app to Applications. Open it and leave it running in the menu bar. The prebuilt app is for Apple silicon Macs running macOS 14 or later. Intel users can build from source.
This is an early local build, ad hoc signed and not notarized. macOS may require you to use System Settings > Privacy & Security > Open Anyway after the first launch attempt. Only do this for a build whose source you trust.
- Start dragging an image or PDF from Finder or your desktop. Keep the mouse button held.
- Tap and release Shift. The format wheel opens around your pointer.
- Move onto a format and release the mouse button.
- Find the new file beside the original.
Tap Shift again during the drag to switch between formats and editing tools. Press Escape or release outside a sector to dismiss. Shift does not need to stay held.
The main window also accepts dropped files and provides a standard file picker and native controls for keyboard and assistive technology access. The menu bar icon reopens it. Closing the window keeps the shortcut running. Use Quit Shift in the menu bar to exit or pause the shortcut if it conflicts with another app.
| Input | Outputs and tools |
|---|---|
| Images | PNG, JPG, PDF, HEIC, TIFF, BMP and GIF, using the encoders available on your Mac |
| PDFs | Every page to a separate image, with page numbers in the filenames |
| PDFs with selectable text | TXT extraction |
| Images | Crop with aspect ratio, size and position controls |
| Images | Background with color, padding and rounded corners |
| Images and PDFs | Lossy compression |
All processing runs locally. No account, upload, API key or network service is needed. Outputs use numbered filenames when a name already exists. Originals are never overwritten. Batch errors appear in the window, and successful files can be revealed in Finder.
Requires the Xcode command line tools and Swift 5.9 or later.
git clone https://github.com/RealAdii/shift-convert.git
cd shift-convert
zsh build.sh
open dist/Shift.appThe app has no external package dependencies. It uses AppKit, SwiftUI, PDFKit, Core Graphics, ImageIO and UniformTypeIdentifiers.
.build/release/Shift --self-test
codesign --verify --deep --strict dist/Shift.appThe checks generate their own fixtures and verify actual image encoding and decoding, multipage PDF export, PDF text extraction, crop and background output, partial batch errors, filename collisions, original preservation, and every wheel sector and dead zone. CI runs these checks on macOS.
The global Finder drag gesture still needs interactive validation across target Macs and screen configurations. The demo is an animated walkthrough using the native wheel and editor renders plus actual conversion outputs. It is not a continuous screen recording.
- Image inputs normalize orientation and cap the longest side at 8192 pixels.
- Animated GIFs and multipage image files use their first frame.
- PDF rendering uses up to 2x page size and a 3000 pixel longest edge, with a limit of 100 pages and 80 megapixels in total rendered pages.
- PDF compression rasterizes pages. It removes selectable text, links and vector content. Compression can increase the size of an already optimized file.
- Scanned PDFs need OCR, which is not included.
- Metadata is not carried across, and colors normalize to sRGB.
- Video, audio, Office documents, redaction and annotation are not implemented.
The 12 second demo and its original soundtrack are reproducible from video/. The native app exports its own interface assets with --demo-assets. Reference footage and third-party music are not included.
See CONTRIBUTING.md for local checks and a manual drag test checklist. Bug reports and small pull requests are welcome.
MIT. Dependency licenses still apply to the optional video toolchain.
