v1.0.0 · Open source · Local-first

Organize photos
by their original date.

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. Limit each run to the number of files you choose and preview every change with dry-run. Nothing is uploaded.

Features

Rename and sort media
from its real metadata.

Three renaming modes

Add a date prefix, fully replace with a timestamp, or use a custom name + timestamp combo. Switch modes anytime.

New

Sort into Year/Month folders

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.

Dry-run preview

See exactly what would change before a single byte moves on disk. The 50-file default limit also applies to previews, and you can choose 1–1000 files or an unlimited run. Live progress shows the current file and completed total throughout the run, with safe cancellation between files. Your last folder and options are restored locally on the next launch, and real runs require an explicit confirmation.

Real metadata

Reads DateTimeOriginal, CreateDate, and QuickTime tags via exiftool and ffprobe. No guessing from filesystem dates.

100% local

Your files never leave your machine. No uploads, no telemetry, no accounts. Just Node and Electron talking to your disk.

Smart scanning

Walks every nested folder by default, or stays on the surface with one toggle. Scans for .heic, .jpeg, .jpg, .mov, .mp3, .mp4, and .png files. Already-formatted files and macOS junk (._*) are skipped automatically. Choose the defaults, only your comma-separated extensions, or combine both sets.

Docs

Use the desktop app
or run the CLI.

  1. 1

    Download the app

    Install Foldnize for macOS, Windows, or Linux from the latest GitHub release.

  2. 2

    Pick a folder

    Select the folder containing the photos, videos, or audio files you want to organize.

  3. 3

    Preview, then organize

    Choose a renaming mode, keep Dry run enabled for the first pass, set the file limit, review the result, and then apply it.

~/Projects · zsh
# Preview: rename photos by EXIF date
$ npx foldnize --root=./photos --mode=replace --limit=50 --dry-run

# Sort media into Year/Month folders
$ npx foldnize --root=./photos --mode=prefix --year-month

Install metadata readers

Foldnize uses exiftool to read photo, audio, and video metadata. Install ffmpeg as an additional fallback for MOV and MP4 creation dates.

Homebrew
$ brew install exiftool ffmpeg

Use the TypeScript library

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.

organize.js
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
  maxFiles: 50,                       // 1–1000; -1 = unlimited
  extensionFilter: {
    mode: "extend",              // "default" | "only" | "extend"
    extensions: ["raw", "gif"],
  },
  dryRun: true,
  onLog: ({ message }) => console.log(message),
});
Read the full documentation