convertfile43 menu bar workflow

Overview

Introduction

A file converter that respects the way you already work in Finder - copy, menu, done.

The app bundles the heavy CLI tools so you are not wiring up Homebrew paths before your first encode. Video and audio run through ffmpeg, usually wrapped by ffconv for live percent and ETA.

Clipboard-first Copy files or pathnames; the menu refreshes twice a second.
Batch-friendly Queue many files; cap parallelism in Settings.
Honest progress Percent on the icon; ETA under the filename in the menu.
Your presets Built-ins plus custom output types and quality settings.
No clicks spared. - the whole point of the app

Setup

Installation

One DMG, one drag, one slightly cautious first open.

  1. Download the latest .dmg from the releases page.
  2. Open it and drag convertfile43 into Applications.
  3. Launch from Applications. Look for the swap icon in the menu bar.
Unsigned build. macOS may refuse the first launch. Right-click the app, choose Open, then confirm.

Setup

Quick start

Thirty seconds from copy to converting.

  1. Select files in Finder. ⌘C (or Copy as Pathname).
  2. Click the convertfile43 menu bar icon.
  3. Choose a preset under Audio, Video, Images, or Documents.
  4. Find outputs beside the originals: name_converted.ext.

Open Settings… (⌘,) for parallel jobs, sounds, and preset editing.

Daily use

How it works

Three moving parts: clipboard, queue, engines.

Clipboard

The menu watches the general pasteboard. Finder file URLs work; plain path text works too. If presets stay greyed out, copy again and give the timer a moment.

Job queue

Jobs move through queued → running → completed (or failed / cancelled). The orchestrator respects maxParallelJobs. Finished rows clear after a few seconds.

Engines

ffmpeg/ffconv for most AV. ImageMagick (and sometimes ffmpeg) for images. LibreOffice for office → PDF when installed at /Applications/LibreOffice.app.

Daily use

Supported formats

Built-in presets cover the usual paths; extend with your own.

CategoryOutputEngine
Audiomp3, aac, flac, ogg, wavffmpeg via ffconv
Videomp4, mkv, avi, webm, ogv, gif, movffmpeg (VideoToolbox where available)
Imagejpg, png, webp, avif, ico, pdf, svgffmpeg / ImageMagick
OfficepdfLibreOffice
Office → PDF only. doc, docx, xls, ppt, odt, and friends need LibreOffice installed separately.

Daily use

Progress and ETA

You should never stare at a fake zero on a real encode.

Menu bar icon

Running ffmpeg jobs show an integer percent, e.g. 42%. Image/office jobs show when percent is unknown.

Dropdown menu

Open the menu while a job runs:

  • First line - truncated filename
  • Second line - 42% · 12m left when speed is known
  • Cancel - stops the job and child processes

ETA math

ffconv reads ffmpeg output and estimates wall-clock time from remaining media duration and speed= (e.g. 2.5x). Large files may sit at 0% during probe - normal.

Logs

Logs → Open log file in the menu. Look for Progress 42.0% (eta: 720s) lines during encodes.

Daily use

Settings and presets

Standard macOS settings window - no hidden panel.

General

  • Parallel jobs - 1 through 8 simultaneous encodes
  • Reveal in Finder on complete
  • Play sound on complete

Presets

Name, input extensions, output type, and optional quality, bitrate, scale, fps, and related fields.

Daily use

Tips and troubleshooting

When something sticks, start here.

Cancel and quit

Cancel under the active job. Quit warns if work is running and tears down ffconv/ffmpeg trees.

Stuck at 0%

Probe phase on big containers, or an old build without live ffconv progress. Check Logs after the run.

Greyed-out presets

No matching files on the clipboard. Copy supported inputs in Finder again.

Build

Architecture

SwiftUI shell, Rust progress pipe, bundled CLIs.

PathRole
FileConverter/App/Entry, delegate, quit flow
FileConverter/Features/MenuBar/Menu UI, clipboard poll
FileConverter/Features/Settings/Presets and preferences
FileConverter/Features/Conversions/Orchestrator
Middleware/rust-tool/ffconv
Installer/DMG packaging

Build

Building from source

Xcode, XcodeGen, Rust. Same toolchain as CI (macOS 26 / Xcode 26.5).

Terminal
brew install xcodegen imagemagick
cd /path/to/convertfile43
xcodegen generate
./Middleware/Scripts/download-binaries.sh
bash Installer/generate-app-icon.sh
xcodebuild -project convertfile43.xcodeproj -scheme convertfile43 \
  -configuration Release -derivedDataPath ./Build \
  -destination "generic/platform=macOS" build \
  CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO \
  CODE_SIGN_ENTITLEMENTS="" CODE_SIGNING_ALLOWED=NO

Local DMG

Terminal
APP="./Build/Build/Products/Release/convertfile43.app"
bash Installer/build-dmg.sh "$APP" "0.2.1" "convertfile43-0.2.1.dmg"

Run bash Scripts/ci-local.sh to mirror CI locally.

Build

Testing

Unit and integration tests via xcodebuild.

Terminal
xcodebuild -project convertfile43.xcodeproj -scheme convertfile43 \
  -configuration Debug -derivedDataPath ./Build \
  -destination "platform=macOS" test \
  CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO \
  CODE_SIGN_ENTITLEMENTS="" CODE_SIGNING_ALLOWED=NO

Build

License

Free and open source.

GPL v3 - LICENSE in the repo. Built on FFmpeg and LibreOffice.