A native macOS video compressor built with SwiftUI. Drag in videos, tweak codec/quality/metadata settings, and batch-compress with real-time progress tracking.
Styled after Twitter's Bowman-era (2009-2014) visual design: clean whites, sky blues, light grays, and generous whitespace.
- macOS 14.0+
- Swift 5.9+ (Xcode 15.4+ or standalone Swift toolchain)
- ffmpeg and ffprobe binaries
swift build -c releaseThe binary lands at .build/release/notsora.
After building, assemble notsora.app manually:
# Create bundle structure
mkdir -p build/notsora.app/Contents/{MacOS,Resources,Frameworks}
# Copy the binary
cp .build/release/notsora build/notsora.app/Contents/MacOS/notsora
# Copy ffmpeg binaries into Resources
cp /opt/homebrew/bin/ffmpeg build/notsora.app/Contents/Resources/ffmpeg
cp /opt/homebrew/bin/ffprobe build/notsora.app/Contents/Resources/ffprobe
chmod +x build/notsora.app/Contents/Resources/ffmpeg
chmod +x build/notsora.app/Contents/Resources/ffprobeCreate build/notsora.app/Contents/Info.plist:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleExecutable</key>
<string>notsora</string>
<key>CFBundleIdentifier</key>
<string>com.notsora.app</string>
<key>CFBundleName</key>
<string>notsora</string>
<key>CFBundleDisplayName</key>
<string>notsora</string>
<key>CFBundleVersion</key>
<string>1</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>LSMinimumSystemVersion</key>
<string>14.0</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
<key>NSHighResolutionCapable</key>
<true/>
</dict>
</plist>Ad-hoc sign and run:
codesign --force --deep --sign - build/notsora.app
open build/notsora.appOpen notsora.xcodeproj and build/run the notsora target (Cmd+R).
notsora needs ffmpeg and ffprobe at runtime. It checks these locations in order:
- App bundle:
notsora.app/Contents/Resources/ffmpeg - Homebrew (Apple Silicon):
/opt/homebrew/bin/ffmpeg - Homebrew (Intel):
/usr/local/bin/ffmpeg
For development, install via Homebrew and the app will find them automatically:
brew install ffmpegFor distribution, bundle the binaries (and their dylib dependencies) inside the app.
- Batch compression with per-file settings
- Video codecs: H.264, H.265 (HEVC)
- Audio codecs: AAC, Opus
- Quality modes: CRF (constant quality) or target bitrate
- Resolution scaling (original, 1080p, 720p, 480p)
- Encoding presets (ultrafast through veryslow)
- Container formats: MP4, MKV, WebM
- Metadata editor with custom tag support
- Real-time progress with ETA
- Drag-and-drop file import
MP4, MOV, AVI, MKV, WMV, FLV, WebM, M4V, MPG, MPEG, 3GP, TS, MTS
notsora/
App/ Entry point and constants
Models/ Data types and enums
ViewModels/ Observable state management
Views/
Sidebar/ File list and row views
Detail/ Settings forms
Progress/ Compression progress UI
Shared/ Theme colors and reusable components
Services/ FFmpeg integration
Resources/ Asset catalogs
MIT