Nominate

macOS app for renaming PDFs based on their contents

156
1
Swift

Nominate

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


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.