155 lines
9.5 KiB
Markdown
155 lines
9.5 KiB
Markdown
<div align="center">
|
||
|
||
<br>
|
||
|
||
# Nomina
|
||
|
||
**Bulk file renaming for the rest of us.**
|
||
|
||
Modern, fast, and public domain. Built with Rust and Tauri v2.<br>
|
||
Looks like it was made this decade because it was.
|
||
|
||
<br>
|
||
|
||
[](https://creativecommons.org/publicdomain/zero/1.0/)
|
||
[](https://tauri.app)
|
||
[](https://www.rust-lang.org)
|
||
[](https://react.dev)
|
||
[](https://www.typescriptlang.org)
|
||
[](#)
|
||
[](#-accessibility)
|
||
|
||
<br>
|
||
|
||
*Nobody should have to rename 400 files by hand. Nobody should have to pay for the privilege of not doing that.*
|
||
|
||
<br>
|
||
|
||
</div>
|
||
|
||
## 🌱 Why another renaming tool?
|
||
|
||
There's no shortage of bulk rename software. Some of it has been around for 15-20 years, battle-tested and reliable. The problem isn't that these tools don't work - they do, and many of them are genuinely good at what they do.
|
||
|
||
The problem is that almost all of them look and feel like relics. Cramped toolbars, raw text fields, tiny buttons, modal dialogs stacked three deep. Interfaces designed around the constraints of an era when 1024x768 was a big screen and "usability" meant "it has a help file." They were fine for power users who learned the quirks, but they're hostile to everyone else. Renaming files is not a complicated task - the tools shouldn't make it feel like one.
|
||
|
||
And then there's the licensing situation. The free ones are usually freeware (closed source, owned by someone, could disappear or go paid tomorrow) or GPL (which is fine but comes with conditions that not everyone wants to deal with). The paid ones charge you for something that, frankly, your operating system should just do better in the first place.
|
||
|
||
Nomina tries to be the thing you'd build if you started from scratch today with no baggage. A proper dark mode, not a skin slapped on top of Win32 controls. Smooth animations. A layout that breathes. Drag-and-drop rule cards instead of cryptic option panels. Live preview that updates as you type. And CC0 public domain licensing, because a file renaming tool is not the kind of thing anyone should be able to own. It's a utility - it should be part of the commons.
|
||
|
||
## 🌿 What it does
|
||
|
||
You pick a folder. You stack renaming rules into a pipeline. You see a live preview of every single change before anything touches the filesystem. When it looks right, you hit rename. If it doesn't look right, you undo.
|
||
|
||
Nomina has **18 rule types** that chain together in any order:
|
||
|
||
| | Rule | What it does |
|
||
|---|---|---|
|
||
| 🔤 | **Replace** | Find and replace text, with regex and case sensitivity options |
|
||
| 🔣 | **Regex** | Pattern matching with capture group support |
|
||
| ✂️ | **Remove** | Strip characters, words, digits, symbols, accents, or regex matches |
|
||
| ➕ | **Add** | Insert text anywhere - supports variables like `{name}`, `{date}`, `{index}`, `{folder}` |
|
||
| 🔠 | **Case** | 13 modes including smart title case, camelCase, snake_case, kebab-case |
|
||
| 🔢 | **Numbering** | Sequential numbers in decimal, hex, roman, alphabetic. Per-folder counters, custom formats |
|
||
| 📅 | **Date** | Insert file dates (created, modified, EXIF) in various formats |
|
||
| ↔️ | **Move parts** | Extract text by position, word, or regex and reposition it |
|
||
| 📎 | **Extension** | Change, remove, normalize, or force file extensions |
|
||
| #️⃣ | **Hash** | MD5, SHA1, or SHA256 content hashes |
|
||
| 📁 | **Folder name** | Pull in parent or grandparent folder names |
|
||
| 🌐 | **Transliterate** | Unicode to ASCII ("cafe" from "café", that kind of thing) |
|
||
| 0️⃣ | **Padding** | Leading zeros for proper alphabetical sorting |
|
||
| 📏 | **Truncate** | Enforce a maximum filename length |
|
||
| 🎲 | **Randomize** | Random hex, alpha, alphanumeric, or UUID strings |
|
||
| 🔀 | **Swap** | Flip parts around a delimiter ("Last, First" becomes "First Last") |
|
||
| 🧹 | **Sanitize** | Strip illegal chars, normalize unicode, collapse whitespace |
|
||
| ✏️ | **Text editor** | Just type whatever you want for each file |
|
||
|
||
Rules are draggable cards. Reorder them, toggle them on and off, duplicate them, right-click for more options. The preview updates as you go.
|
||
|
||
## 🍄 Not just renaming
|
||
|
||
- **Live preview** of every change before anything touches the disk
|
||
- **Conflict detection** when two files would end up with the same name
|
||
- **Full undo** with persistent history that survives app restarts
|
||
- **Presets** you can save, load, export as `.nomina` files, and share
|
||
- **Filters** by name pattern, regex, file size, type, and subfolder depth
|
||
- **Explorer integration** - "Edit in Nomina" in your Windows right-click menu, auto-repairs itself if you move the exe to a different location
|
||
- **Context menus** everywhere - right-click files, pipeline rules, and sidebar folders for quick actions
|
||
- **Drag and drop** reordering for pipeline rules
|
||
- **Automatic backups** before renaming, with configurable location and scheduled cleanup
|
||
- **Keyboard shortcuts** for common operations
|
||
|
||
## ♿ Accessibility
|
||
|
||
Nomina targets WCAG 2.2 AAA conformance. Accessibility isn't a feature you bolt on at the end - it's a baseline. Everyone who needs to rename files should be able to rename files, regardless of how they interact with their computer.
|
||
|
||
- **Screen reader support** - semantic markup, ARIA labels, and a live announcement region for status changes
|
||
- **Keyboard navigation** - full keyboard-only mode, visible focus indicators (with an enhanced option for higher visibility), tab ordering throughout
|
||
- **Reduced motion** - auto-detected from your OS preferences on first launch. Three levels: normal, reduced, and no motion at all. Respects `prefers-reduced-motion` automatically
|
||
- **High contrast** - toggleable high contrast mode with WCAG AAA contrast ratios (7:1 for normal text, 4.5:1 for large text). Also responds to `prefers-contrast` and `forced-colors` media queries
|
||
- **Color blind modes** - deuteranopia, protanopia, and tritanopia filters so color is never the only way information is conveyed
|
||
- **Font scaling** - adjustable from 80% to 150%, independent of the zoom level
|
||
- **Larger touch targets** - optional mode that increases clickable areas for people with motor difficulties
|
||
- **Reduced transparency** - removes glass and blur effects that can cause readability issues. Responds to `prefers-reduced-transparency`
|
||
- **Zoom** - the entire UI scales from 70% to 150% without breaking layout
|
||
|
||
The app reads your OS accessibility settings on first launch and configures itself to match - if you already have reduced motion or high contrast enabled system-wide, Nomina picks that up without you having to set it again.
|
||
|
||
## 🪨 Portable
|
||
|
||
Single exe. No installer. Put it anywhere. All its data (settings, presets, undo log, webview cache) lives in a `data` folder next to the binary. Delete the folder, it's gone. Put it on a USB stick, it works. Move it to another machine, it works. Your settings travel with you.
|
||
|
||
The optional Explorer context menu is the one thing that touches the registry (because that's how Windows works), and there's a button to cleanly remove it. After that, your system is exactly as it was before.
|
||
|
||
## 🍵 Configurable
|
||
|
||
Dark, light, or match-your-system theme. Adjustable accent color hue. Zoom from 70% to 150%. Compact mode for smaller screens. Zebra striping on the file list. Configurable preview delay, default sort order, conflict handling strategy, backup location with scheduled cleanup, undo history depth, notification preferences (toasts, taskbar flash, sound). About 80 settings total, all stored locally next to the exe.
|
||
|
||
## 🌻 Public domain
|
||
|
||
Nomina is released under [CC0 1.0](https://creativecommons.org/publicdomain/zero/1.0/). No rights reserved. No contributor license agreements. No corporate ownership. No "open core" bait-and-switch where the good parts cost money.
|
||
|
||
The code is a common resource. Fork it, modify it, redistribute it, learn from it, build something better with it. You don't need to ask, and there's nothing to sign. Software that people need every day should be free to use, free to study, free to share, and free to improve - not because that's a clever business strategy, but because that's the only arrangement that actually respects the people using it.
|
||
|
||
Tools belong to the people who use them. Always have.
|
||
|
||
---
|
||
|
||
## 🔧 Building from source
|
||
|
||
### Prerequisites
|
||
|
||
- Rust (stable)
|
||
- Node.js (LTS)
|
||
- Visual Studio Build Tools (Windows)
|
||
|
||
### Commands
|
||
|
||
```bash
|
||
# install frontend deps
|
||
cd ui && npm install
|
||
|
||
# development
|
||
cargo tauri dev
|
||
|
||
# tests
|
||
cargo test -p nomina-core
|
||
|
||
# release build
|
||
cargo tauri build --no-bundle
|
||
```
|
||
|
||
Binary lands at `target/release/nomina.exe`.
|
||
|
||
### Structure
|
||
|
||
```
|
||
nomina/
|
||
crates/
|
||
nomina-core/ # rename engine - pure Rust, no UI
|
||
nomina/ # Tauri v2 shell, commands, system integration
|
||
ui/ # React + TypeScript frontend
|
||
```
|
||
|
||
`nomina-core` is a standalone library that handles renaming logic, pipeline execution, filters, undo, and presets. The `nomina` crate wraps it in a Tauri window. The `ui` folder is the frontend. The engine doesn't depend on the UI, so you could wire up a CLI or a different interface on top of it if you wanted to.
|