Batch renaming is the practice of applying a consistent naming rule across dozens or hundreds of image files at once, instead of clicking into each photo one by one in a file manager. For photographers, designers, archivists, and content teams, filenames are not cosmetic: they become the keys that search tools, digital asset managers, CMS uploads, and backup scripts use to find work again. A shoot that returns from the camera as IMG_4521.jpg tells you nothing about the client, the venue, or the delivery date; a folder of exports named final_v2_really_final.jpg invites collisions the moment two editors work in parallel.
SynthQuery’s Photo Batch Renamer runs entirely in your browser. You load JPG, PNG, WebP, BMP, TIFF, or HEIC files through drag-and-drop or the file picker, compose a pattern from variables such as capture date and sequence number, optionally layer find-and-replace (including regular expressions), adjust case, choose how rows are ordered, preview every destination filename, and download a single ZIP that contains the same image bytes under their new names. Nothing is uploaded to our servers: EXIF is read with JavaScript, archives are built with JSZip, and the File API keeps pixels on your machine. When your pipeline also involves checking whether captions or blog copy were machine-drafted, you can move from this utility to the AI Detector or Humanizer elsewhere on SynthQuery without mixing those text workflows with your local files here.
Why filenames still matter in cloud galleries
Even when a DAM stores rich metadata in a database, many downstream systems—static site generators, e-commerce feeds, email attachments—still key off the literal string in the attachment name. Predictable patterns reduce support tickets from colleagues who “cannot find the hero image.”
Client-side renaming as a privacy default
Uploading a wedding folder to an unknown web service just to change names duplicates risk. Keeping the operation in-tab means your contractually sensitive imagery never transits a third-party queue you did not vet.
What this tool does
The naming pattern field accepts plain text interleaved with tokens in curly braces. The {n} token expands to a sequential index after your chosen sort order, with optional zero-padding so sequences read as 001, 002 instead of 1, 2 when you prefer aligned columns in terminal listings. The {date} token prefers Exchangeable Image File Format capture timestamps when exifr can revive them, falling back to the file’s last-modified clock when EXIF is missing—common after some messenger re-encodes. {original} preserves the user-visible stem of the incoming filename (without extension) after stripping characters that Windows and macOS reject. {width} and {height} insert pixel dimensions, using EXIF dimensions when present and decoding the image in-browser when necessary so PNG screenshots still report accurate sizes. {ext} emits the lowercase extension; if you omit {ext} from the pattern, the tool appends the source extension automatically so you do not accidentally produce extensionless blobs. {camera} combines Make and Model tags when both exist, or substitutes a short placeholder when the body was generated without embedded camera metadata.
Prefix and suffix fields wrap the substituted pattern before case conversion runs, which is helpful when every deliverable for a client code must start with a stock-keeping prefix. The find-and-replace row operates on the assembled string prior to final extension normalization; enabling “Regex find” switches the search term to a JavaScript RegExp with the global flag so you can collapse repeated delimiters or strip date fragments in one pass. Case modes cover uppercase, lowercase, and a title-style pass suited to marketing folders. The preview table recomputes instantly, highlights regex errors in red, and automatically de-duplicates collisions by appending numeric suffixes before export.
Sort modes include alphabetical by original filename, chronological by interpreted EXIF or file date, ascending file size, and a custom mode where a grip handle enables drag reordering powered by SortableJS—ideal when you have already curated a sequence in Lightroom but need filenames to match that exact hero order.
Padding and human-readable archives
Padding is controlled with a single numeric field. Set it to zero to keep natural widths, or to four if you want 0001 beside 0999 without re-editing the pattern when batches cross magnitude boundaries.
Collision safety before ZIP creation
Two different sources can still converge on the same string after replacement. The preview shows the post-uniquification names so you can adjust the pattern before downloading.
Technical details
The tool relies on the W3C File API to read blobs, exifr to parse EXIF segments without server round-trips, and the browser’s Image decoder when raster dimensions are absent from tags. Filename assembly is pure TypeScript: tokens substitute, illegal path characters strip, case transforms apply, then find-and-replace runs—literal split/join or RegExp with global matching. Final names always reattach the lowercase extension from the source file so operating systems continue to associate MIME types correctly.
JSZip constructs an in-memory archive; each entry is filled from arrayBuffer() reads of the original File objects, so pixels are never re-encoded. SortableJS attaches only to the table body while custom mode is active; destroying instances on mode changes prevents duplicate listeners. Dynamic import of the page client keeps the initial route payload small, improving Largest Contentful Paint relative to bundling the ZIP and EXIF stack into the server render.
Regex engine specifics
Patterns use JavaScript’s RegExp constructor. Anchors (^ $) and capture groups behave exactly as in browser consoles; invalid sources surface the engine’s native error message beside the preview.
HEIC and browser variance
HEIC parsing depends on browser codecs; when decoding fails, width and height may read zero until the file is converted elsewhere, but renaming still proceeds using other tokens.
Use cases
Wedding and event photographers often receive cards labeled DSC0001.jpg from second shooters mixed with their own bodies; batch renaming by capture date plus sequence produces a single timeline before culling. Stock contributors preparing uploads for agencies can inject camera model tokens into filenames to satisfy internal QA spreadsheets without manual typing. E-commerce studios renaming vendor drops can prepend SKU prefixes and strip illegal punctuation introduced by overseas suppliers.
Software teams embedding screenshots in documentation benefit from width-height tokens so retina and standard captures sort predictably in Git LFS mirrors. Researchers archiving field imagery can align filenames with notebook entry dates while preserving original stems for citation. Video production assistants exporting still frames for storyboards can number frames after custom drag order to match the editor’s timeline. Museums digitizing collections sometimes need human-readable accession numbers paired with padded sequence indices for cold storage tiers.
When the same images feed both public web and internal review, run this renamer on a duplicate folder so external-safe names never overwrite forensic originals. If you later need AI-assisted polish on the marketing copy beside those galleries, route text through SynthQuery’s Humanizer while keeping renamed binaries local.
Event photography turnaround
Sort by date, pattern {date}_{n}, and every deliverable folder mirrors chronological delivery without opening Lightroom’s export dialog twice.
Stock and marketplace prep
Combine {camera}_{n} with find-and-replace to remove spaces from maker names that confuse FTP scripts.
Archives and compliance
Use prefixes that map to retention schedules while keeping {original} as a traceable tail if legal requests the native camera filename.
How SynthQuery compares
Desktop bulk renamers are powerful but often assume you already live inside a single OS shell script. SynthQuery focuses on visual confirmation, EXIF-aware tokens, and instant sharing with teammates who may not have admin rights to install utilities.
Aspect
SynthQuery
Typical alternatives
EXIF-aware tokens
{date} and {camera} read from tags with sensible fallbacks.
Basic renamers only see filesystem timestamps.
Preview first
Every destination filename is visible before ZIP export.
CLI previews require piping to text files.
Deployment
Works from any modern browser tab; no installer.
IT may block unsigned desktop tools.
Privacy
No upload; processing stays client-side.
Some web converters upload to workers.
Cost
Free while using the page.
Paid DAM seats for advanced renaming.
How to use this tool effectively
Start by assembling the highest-quality originals you are allowed to rename; if you rename proxies first, downstream editors may point to stale paths. Open the Photo Batch Renamer and drag your folder selection into the dashed upload region, or activate the hidden file input through the browse link or keyboard focus. Each row begins loading metadata asynchronously—wait for the spinner to clear if you need accurate {date}, {camera}, or dimension tokens.
Choose a sort mode that matches how you think about the set: alphabetical for quick sanity, date for chronological storytelling, size when you want small thumbnails numbered before large masters, or custom after switching from another mode so the current visual order becomes draggable. Compose your pattern—for example {date}_{n} for daily shoots—and set padding to match your DAM’s import rules. Add prefix or suffix strings if your agency mandates a client code, then optionally fill find-and-replace: literal mode replaces every substring, while regex mode accepts patterns such as \d{4}-\d{2}-\d{2} to strip ISO dates from stems.
Scan the preview column for red error text; invalid regular expressions block ZIP export until corrected. When every new name looks right, press “Download renamed ZIP.” Your browser saves an archive whose member names reflect the preview while file contents remain bit-identical to the uploads. Extract the ZIP beside your originals, verify a few hashes if your workflow requires it, and only then delete or archive the old names. For complementary metadata hygiene, chain this step with Remove EXIF when you must publish stripped derivatives.
Keyboard and assistive access
The drop zone responds to Enter and Space to open the picker, and each control exposes labels tied to inputs for screen readers. Drag handles include aria-label text referencing the underlying filename.
Batch size guardrails
The queue caps at thirty files and fifty megabytes each to keep laptops responsive; run multiple passes for gigantic archives.
Smooth robotic captions or alt text drafts that describe imagery after renames remove camera defaults.
Frequently asked questions
Use {n} for the sequence index after sorting, {date} for YYYY-MM-DD from EXIF capture time when available (otherwise last modified), {original} for the incoming basename without extension, {width} and {height} for pixel dimensions, {ext} for the lowercase extension, and {camera} for Make plus Model when EXIF includes them. Omit {ext} if you want the tool to append the original extension automatically after your pattern.
Set the “Number padding” field to the minimum width you want. A value of 3 turns index 7 into 007, while 0 leaves the number as wide as it naturally prints. Padding applies only to {n}, not to literal digits you type into the pattern.
Yes. Enable “Regex find” and enter a JavaScript-compatible pattern. Replacement supports capture references such as $1 when your regex defines groups. Invalid patterns show the engine error inline and disable ZIP export until fixed. Disable regex to return to literal substring replacement across the assembled filename stem.
The token always expands to ISO-style YYYY-MM-DD for easy sorting in file managers. The value prefers DateTimeOriginal, then CreateDate, then ModifyDate inside EXIF. If none revive to a real instant, the file’s lastModified timestamp supplies the calendar day in your local timezone interpretation.
Name sorts case-insensitively by original filename. Date sorts ascending using the same EXIF preference as {date}, falling back to lastModified. Size sorts ascending by byte length. Custom mode freezes the current order and enables drag handles; switching into custom from another mode first sorts rows with your previous mode so you start from a sane baseline.
The preview runs a uniquification pass: the first occurrence keeps its name, and later collisions gain _2, _3, and so on before the extension. Watch the preview column to confirm the suffix strategy matches your downstream importer.
No. Files stay inside your browser tab; EXIF parsing and ZIP creation execute with local JavaScript and Web APIs. Closing the tab discards the queue from memory unless your browser restores a session—always keep offline backups of masters.
No recompression occurs. The ZIP stores the original bytes under new entry names. Only the string metadata of the archive changes; pixel data are untouched.
HEIC uploads are accepted. EXIF reading works when the browser exposes the file; dimension tokens may require a successful decode. If width and height show zero, convert to JPEG in another tool or rely on non-dimension tokens until decoding succeeds.
Pair renaming with Remove EXIF before public posts, Timestamp Adder when visible dates must appear on pixels, Text Watermark for rights messaging, Histogram Viewer for tonal QA, and the Copyright Notice Generator for HTML-side legal context. For text workflows around the same campaign, use the AI Detector or Humanizer.
JPG, PNG, WebP, BMP, TIFF, HEIC — up to 30 files, 50 MB each. All renaming runs in your browser.
Variables: {n} sequence, {date} EXIF date (YYYY-MM-DD), {original}, {width}, {height}, {ext}, {camera}. Original extension is appended automatically unless you include {ext}.
e.g. 3 → 001, 002. 0 → 1, 2, 3.
0 files
Preview
Original
New name
No files yet. Upload images to preview new filenames.