Skip to content

macOS app for renaming PDFs based on their contents

License

Notifications You must be signed in to change notification settings

NSHipster/Nominate

Repository files navigation

Nominate

Nominate is a macOS app that renames PDFs based on their contents.

nominate-app-in-action.mov

Like many striving for a paperless lifestyle, I habitually scan and shred every document that comes my way. While this keeps my desk free of clutter, it creates a digital mess of PDF files with nothing but a timestamp to their name.

Rather than go through an rename each file all by hand, Nominate does this for me automatically.
See this file, Scan2025-02-03_123456.pdf? Let's drag-and-drop it into Nominate.

Nominate uses a combination of new-fangled AI and old-school NLP techniques to extract a timestamp and summary of the document's contents, which get massaged into a short, descriptive filename.

Important

Nominate performs 100% of its processing on-device. Your documents never leave your computer.

Nominate.app - Suggestion to rename file

Moments later, Nominate suggests a new filename: 2025-01-31 Bank Statement.pdf.
Much better!

Go ahead and click the Apply button to rename the file. Or, you can do the "Human-in-the-Loop" thing and check its work. Click the Quick Look icon (👁️) to open up a preview or the magnifying glass icon (🔍) to reveal the file in Finder.

Requirements

Setup

Download Ollama with Homebrew or directly from their website.

brew install --cask ollama

Download the llama3.2 model (2GB).

ollama pull llama3.2

Clone the Nominate repo and open it in Xcode.

git clone https://github.com/NSHipster/Nominate.git
cd Nominate
xed .

In the menu bar, select Product > Run (R) to build and run the app.

Implementation Details

Nominate is a native macOS app written in SwiftUI. Please do not take this as any kind of endorsement. To paraphrase Werner Herzog describing his feelings about French:

I do understand SwiftUI, but I refuse to write it. It's the last thing I would ever do. [...] For this project I had to write a few things in SwiftUI. I regret it.

Nominate uses the ollama-swift package to interact with Ollama via its HTTP server API, which runs at http://localhost:11434/api/.

Apple's PDFKit framework is used for OCR. The NaturalLanguage framework is used to lemmatize and remove filler words from filenames. The Foundation framework's DateFormatter class is used to parse and format dates found in the PDF.

Nominate's UI was inspired by ImageOptim by Kornel Lesiński.

Future Enhancements

  • Pre-built releases available for download
  • Improve user-facing error messages
  • Create onboarding flow for Ollama and model installation
  • Implement model selection settings
  • Support customizable filename templates
  • Enable Quick Action menu integration
  • Allow Dock icon as drop target for files
  • Extend functionality to rename images using llama3.2-vision

License

Nominate is released under the MIT License.

About

macOS app for renaming PDFs based on their contents

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Languages