Three renaming modes
Add a date prefix, fully replace with a timestamp, or use a custom name + timestamp combo. Switch modes anytime.
Foldnize is a local-first photo organizer that renames photos by EXIF date, organizes iPhone photos and videos by metadata date, and sorts media into Year/Month folders. Preview every change with dry-run. Nothing is uploaded.
IMG_1234.jpg
→
20230715-142310.jpg
VID_4567.mp4
→
20230715-153022.mp4
DSC_9012.jpg
→
20230716-090145.jpg
photo.png
→
vacation-20230716-104230.png
random.jpg
→
2023/07/20230715-random.jpg
Features
Add a date prefix, fully replace with a timestamp, or use a custom name + timestamp combo. Switch modes anytime.
Optionally move each renamed file into a
YYYY/MM/ subfolder based on its date. Existing
folders are reused; missing ones are created on the fly.
See exactly what would change before a single byte moves on disk. Toggle dry-run on — it's the safe default.
Reads DateTimeOriginal, CreateDate,
and QuickTime tags via exiftool and
ffprobe. No guessing from filesystem dates.
Your files never leave your machine. No uploads, no telemetry, no accounts. Just Node and Electron talking to your disk.
Walks every nested folder by default, or stays on the surface
with one toggle. Scans for
.jpeg, .jpg, .mov,
.mp3, .mp4, and .png
files. Already-formatted files and macOS junk (._*)
are skipped automatically.
Docs
Install Foldnize for macOS, Windows, or Linux from the latest GitHub release.
Select the folder containing the photos, videos, or audio files you want to organize.
Choose a renaming mode, keep Dry run enabled for the first pass, review the result, and then apply it.
# Preview: rename photos by EXIF date
$ npx foldnize --root=./photos --mode=replace --dry-run
# Sort media into Year/Month folders
$ npx foldnize --root=./photos --mode=prefix --year-month
Foldnize uses exiftool to read photo, audio, and
video metadata. Install ffmpeg as an additional
fallback for MOV and MP4 creation dates.
$ brew install exiftool ffmpeg
Run npm install foldnize to organize media from a
Node.js script, CI job, or another desktop app. The package ships
TypeScript declarations and has zero runtime dependencies.
import { organizeFolder, Mode } from "foldnize";
organizeFolder({
root: "/Users/you/Pictures/2023",
mode: Mode.CUSTOM, // PREFIX | REPLACE | CUSTOM
customName: "vacation", // required when mode is "custom"
organizeIntoYearMonth: true, // move into <root>/YYYY/MM/
scanSubfolders: true, // recurse (default); false = top-level only
dryRun: true,
onLog: ({ message }) => console.log(message),
});