Skip to content

esmail-mkh/Nomina

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

41 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

✦ Nomina ✦

Advanced Batch File & Folder Renamer

A modern, beautiful desktop app for renaming files and folders in bulk — with live preview, a flexible rule engine, presets, and a fully bilingual UI (English / فارسی).

Python pywebview JavaScript HTML5 CSS3

🇮🇷 فارسی · Download · Features · Install · Build · Usage · Shortcuts


📸 Preview

Nomina app screenshot

Nomina in action — dark theme


⬇️ Download

Grab a pre-built binary from the latest release — no Python install required.

Platform File Notes
🖥️ Windows Installer Nomina-Setup-vX.Y.Z.exe Run the installer — adds Start Menu & Desktop shortcuts, includes uninstaller
🖥️ Windows Portable Nomina-vX.Y.Z-windows-x64.zip Unzip and run Nomina.exe — no installation needed
🐧 Linux x64 Nomina-vX.Y.Z-linux-x64.tar.gz tar -xzf then ./Nomina/Nomina
🐧 Linux ARM64 Nomina-vX.Y.Z-linux-arm64.tar.gz Same as above, on Raspberry Pi 4/5 or ARM servers
🍎 macOS (Apple Silicon) Nomina-vX.Y.Z-macos-arm64.zip Unzip → drag Nomina.app to Applications. First launch: right-click → Open. Runs on Intel via Rosetta 2

Every release ships with a SHA256SUMS.txt so you can verify your download.


✨ Overview

Nomina turns the tedious task of renaming dozens — or thousands — of files into a smooth, visual workflow. Drop a folder, stack up rules (prefix, suffix, replace, slice, transform, numbering), and watch the new names update live before a single file is touched on disk.

Crafted with care for clarity and speed. No bloat, no telemetry, no surprises.


🚀 Features

Batch Rename Rename hundreds of files & folders in one sweep
🔍 Live Filter Quickly narrow down items by name
🎨 Rule Engine Mix prefix, suffix, replace, remove, slice, case-transform, and numbering
🔄 Live Preview See every new name update in real time as you tweak rules
🧠 Smart Validation Detects invalid characters, name conflicts, and reserved names
💾 Presets Save and reuse your favorite rule combinations
📤 Import / Export Presets Export presets to a .json file or import from one — share across machines
↩️ Undo Undo the last rename batch in one click
🔁 Recursive Mode Optionally scan subfolders when loading a directory
🌐 Bilingual UI Full English & Persian (RTL) support, switch on the fly
🌗 Dark / Light Beautiful themes that respect your eyes
🖱️ Drag & Drop Drop files or a folder anywhere on the window to load them
📋 Clipboard Paste Ctrl+Shift+V to load a copied path instantly
🛡️ Safe by Default Nothing is renamed until you hit Rename — preview first, commit later
🎯 Metadata Cleanup Optional removal of file metadata on rename

🧩 Rule Engine

Build complex rename pipelines by combining any of these rules:

  • Prefix / Suffix — add text before or after the name
  • Replace — find & replace, with optional regex
  • Remove — strip out unwanted substrings
  • Slice — keep a portion of the original name by index
  • Transform — UPPERCASE, lowercase, Title Case, camelCase, kebab-case, snake_case
  • Numbering — sequential numbers with custom start, step, and zero-padding
  • Extension — change or normalize file extensions

Each rule can be toggled independently and applied to all items or just the selected ones.


📦 Installation

Requirements

  • Python 3.10+
  • Windows 10/11 (Edge WebView2), Linux (GTK 3 + WebKit2GTK 4.1), or macOS 11+

Setup

# 1. Clone the repository
git clone https://github.com/esmail-mkh/nomina.git
cd nomina

# 2. (Recommended) Create a virtual environment
python -m venv .venv
# Windows:
.venv\Scripts\activate
# Linux / macOS:
source .venv/bin/activate

# 3. Install dependencies
pip install -r requirements.txt

# 4. Run the app
python main.py

💡 Tip: On first run, Nomina creates its config folder at
Documents/EMKH_Apps/Nomina/ (or ~/Documents/EMKH_Apps/Nomina/ on Linux/macOS) for your presets and settings.


🏗️ Build from Source

You can produce a standalone, redistributable app for your platform with PyInstaller.

# Install build tooling
pip install pyinstaller pillow

# Generate platform-specific icons from build/icon.svg
python build/make_icons.py

# Build (onedir) — output lands in dist/Nomina/  (or dist/Nomina.app on macOS)
pyinstaller build/nomina.spec --noconfirm --clean

For smaller binaries, install UPX and add --upx-dir /path/to/upx (Windows + Linux only — macOS skips UPX automatically). The included spec already declares safe exclusion rules.

🤖 Automated releases (GitHub Actions)

This repo ships with a manual-dispatch workflow at .github/workflows/release.yml that:

  1. ✅ Asks for a release version when triggered
  2. 🛠️ Builds in parallel on Windows x64, Linux x64, Linux ARM64, and macOS ARM64 runners
  3. 🎨 Generates platform icons from build/icon.svg
  4. 📦 Compresses with the latest UPX (auto-fetched from upstream)
  5. 🖥️ Builds a Windows Installer (.exe) with Inno Setup alongside the portable .zip
  6. 🚀 Publishes a GitHub Release with all archives, the installer, and SHA256SUMS.txt

To cut a release: Actions → Build & Release → Run workflow → enter version → run.


🎬 Usage

  1. Load a folder — click Browse, paste a path, or drag-and-drop a folder onto the window.
  2. Filter (optional) — narrow the list to what you want to rename.
  3. Select items (optional) — leave nothing checked to apply to all, or tick specific rows.
  4. Configure rules — turn on Prefix / Suffix / Replace / Numbering / Transform / etc.
  5. Preview — the New Name column updates live as you change rules.
  6. Validate — click Validate to surface any invalid names or conflicts.
  7. Rename — click Rename to commit changes to disk.

⌨️ Keyboard Shortcuts

Shortcut Action
Ctrl + Enter Load path from input
Ctrl + Shift + V Paste path from clipboard and load
Ctrl + S Execute Rename
Esc Close any open modal

🛠️ Tech Stack

Layer Technology
🐍 Core Python 3.10+
🖥️ Window / Bridge pywebview
🎨 UI HTML5 · CSS3 · Vanilla JavaScript
📋 Utilities pyperclip, pathlib, tkinter (folder picker)

📁 Project Structure

nomina/
├── main.py                       # Python entry point + pywebview API bridge
├── index.html                    # Main UI markup
├── style.css                     # All styling (dark + light themes, RTL support)
├── script.js                     # UI logic, i18n, rule engine, preview
├── requirements.txt              # Python runtime dependencies
├── fonts/                        # Bundled fonts (Outfit, IBM Plex Mono, Vazirmatn)
├── build/
│   ├── icon.svg                  # Source app icon (matches in-app titlebar)
│   ├── make_icons.py             # Rasterizes SVG → .ico / .png / .icns
│   └── nomina.spec               # PyInstaller spec (onedir, cross-platform, UPX-ready)
├── docs/
│   └── screenshot.png            # Used in README preview
└── .github/
    └── workflows/
        └── release.yml           # Manual-dispatch release workflow (Win/Linux/macOS)

👤 Developer

E.MKHPython Developer
Crafting tools that feel effortless.

GitHub Telegram


📜 License

This project is licensed under the MIT License — see the LICENSE file for details.


If Nomina saved you time, consider giving it a ⭐ on GitHub — it really helps!

Made with ☕ and a little Python magic.

About

✦ Nomina — A modern batch file & folder renamer for Windows. Python + pywebview, with live preview, a flexible rule engine, presets

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors