Skip to content

thousandflowers/Forge

Repository files navigation

πŸ”¨ Forge

A fast, native macOS app for batch file conversion β€” no dependencies, no bloat.

Drag in hundreds of images, videos, audio files, or PDFs. Pick a preset. Convert them all β€” in parallel, with RAM kept low by streaming. 100% Apple frameworks (Core Image, AVFoundation), zero external tools.

Build and Test Swift 5.9 macOS 13+ License: MIT

Forge β€” batch file conversion on macOS

Why Forge

  • Native & dependency-free β€” Core Image + AVFoundation do the work. No ImageMagick, FFmpeg, or LibreOffice to install. It just runs.
  • Batch-first β€” drop hundreds of files, convert them in bounded parallel waves that respect your concurrency setting.
  • Memory-conscious β€” streaming conversion keeps RAM flat even on large video.
  • Watched folders β€” assign a preset to a folder; anything dropped in is converted automatically (FSEvents).
  • Presets & history β€” reusable transformation pipelines, full processing history, JSON-backed (no Core Data).

Supported formats

Kind Read Write Operations
Image JPEG, PNG, TIFF, HEIC, WebP, BMP, GIF, TGA, ICO JPEG, PNG, TIFF, HEIC… convert Β· resize (4 modes) Β· quality Β· filters
Video MP4, MOV, M4V, AVI, MKV, WebM MP4, MOV, M4V (H.264) convert Β· resolution Β· bitrate/quality
Audio MP3, WAV, M4A, AAC, FLAC, ALAC, AIFF MP3, M4A, WAV, AAC, FLAC convert Β· bitrate Β· sample rate Β· channels
Documents PDF, TXT, CSV, HTML, RTF images (JPEG/PNG/TIFF), text PDF β†’ images Β· basic text conversions

Install

Download (recommended)

Grab the latest .dmg from the Releases page, open it, and drag Forge to Applications.

Unsigned build: on first launch, right-click the app β†’ Open to bypass Gatekeeper.

Build from source

git clone https://github.com/thousandflowers/Forge.git
cd Forge
swift build -c release
.build/release/Forge

Requires macOS 13+ (Ventura) and Swift 5.9+.

Usage

Batch convert

  1. Launch Forge, drag & drop files into the window.
  2. Pick a preset (e.g. Instagram Post), choose destination (Overwrite / Copy to / Move to).
  3. Click Start Processing.

Watched folder

  1. Open the Folders tab, add a folder, assign it a preset.
  2. Anything dropped in that folder is converted automatically.

Custom preset

  1. Presets tab β†’ +.
  2. Set target format, resize, quality (1–100), optional filter. Save β€” it's now usable in batch and watched-folder modes.

Architecture

SwiftUI  ──▢  ProcessingCoordinator  ──▢  ProcessorRegistry  ──▢  Image / Video / Audio / Doc processors
                     β”‚                                                    (Core Image Β· AVFoundation Β· PDFKit)
              bounded TaskGroup                             MonitoredFolderWatcher (FSEvents)
              (maxConcurrentNative)                         PersistenceManager (JSON in App Support)
  • ProcessorRegistry picks the right processor for each file type.
  • ProcessingCoordinator runs conversions, tracks active tasks for cancellation.
  • RulePreset β€” serializable transformation pipelines.
  • PersistenceManager β€” JSON storage for presets, history, monitored folders.

Development

swift test                 # run the unit suite
bash Scripts/generate_samples.sh   # generate sample test files

Roadmap

  • Native image / video / audio / PDF conversion
  • Bounded-concurrency batch processing with live progress
  • Presets, processing history, JSON persistence
  • Watched-folder UI polish + completion notifications
  • Preset import/export
  • CLI (forge) + Shortcuts integration

Contributing

PRs welcome. Fork β†’ feature branch β†’ tests green (swift test) β†’ PR. Follow the Swift API Design Guidelines, keep memory bounded (stream, don't fully load), use async/await + actors.

License

MIT β€” see LICENSE.

Acknowledgments

Built with Core Image, AVFoundation, and SwiftUI. Inspired by the original Shift β€” this is a native, from-scratch rebuild.

About

πŸ”¨ Fast, native macOS batch file converter β€” images, video, audio, PDF. No dependencies, 100% Apple frameworks.

Topics

Resources

Contributing

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages