ZHiCK Studio · free

ZHiCK Renamer

Batch renaming for people with render folders. It knows what an image sequence is, it shows you the result before it touches the disk, and it can put everything back.

ZHiCK Renamer?
RulesPresets ⌄Add rule ⌄
1Find & replace↑ ↓ ✕
Find
Replace with
Match caseRegex
2Renumber frames↑ ↓ ✕
First frame1001▲▼
Keep missing frames as gaps
Files6 rows · 381 files
Current name → new name
SH010 notes v2.txt
SH010_comp_bty.[1001-1240].exr·
SH010_comp_depth.[1001-1040].exr·
SH010_plate_ref.jpg
slate.png
SH020_bty.[0056-0156].exr·
0 to rename · 6 unchangedUndoClearRename

The app, running. The theme control in its header is live — press it to see the other one.

Sequences are one row

240 EXRs arrive as a single line with a frame count, not 240 lines to scroll past.

It refuses bad batches

Collisions, occupied names and names Windows rejects are caught in the preview, before anything moves.

Undo outlives the app

Every batch is journalled to disk first, so Ctrl+Z still works after a crash.

Getting started

Three steps to your first rename

No setup, no project, no account. The app opens ready to work.
  1. 1

    Drop a folder in

    Drag a render folder onto the window, or use Add. Numbered frames are grouped automatically, so 240 EXRs arrive as one row rather than 240.

  2. 2

    Type in the rule

    The app opens with Find & replace already there. Type what you want gone and what should replace it — the preview updates on every keystroke, with the changed characters in green.

  3. 3

    Press Rename

    Nothing has touched the disk until you do. If a name would collide or Windows would reject it, that row is blocked and says why before you press anything.

The part that matters

A sequence is one row

Every other batch renamer treats a render as two hundred unrelated files. This one groups them, tells you how many frames there are, and says so when some are missing — a render that died at frame 1180 looks completely normal in a file listing.
Files240 rows
SH010_comp_bty.1001.exr
SH010_comp_bty.1002.exr
SH010_comp_bty.1003.exr
SH010_comp_bty.1004.exr
SH010_comp_bty.1005.exr
SH010_comp_bty.1006.exr
SH010_comp_bty.1007.exr

…and 233 more

SH010_comp_bty.[1001-1240].exrbecomesSH010_cmp_bty.[1001-1240].exr

One row, 240 files renamed. Frame numbers, the separator and the extension are structure — no ordinary rule can touch them.

shot_v2.exr · shot_v3.exrbecomestwo rows, not a two-frame sequence

Grouping needs a matching digit width, and either 3+ digits of padding or 4+ frames. Versions are unpadded; frame numbers are not. It is a heuristic, so the frame count is on every row and grouping is a toggle.

Every rule

Eight rules, applied top to bottom

Rules stack. Each one is handed what the last one produced, so “strip the version and renumber the frames” is one pass, not two. Every rule has an on/off switch and a position.

Find & replace

Swap text anywhere in the name. Tick Regex for patterns — an Examples menu and a ? cheat sheet appear beside it when you do.

Rules

1Find & replace↑ ↓ ✕
Findcomp
Replace withcmp
Match caseRegex

Files

Rename 2
Current name → new name
SH010_comp_bty.[1001-1240].exrSH010_cmp_bty.[1001-1240].exr
SH010_comp_depth.[1001-1040].exrSH010_cmp_depth.[1001-1040].exr
SH010_plate_ref.jpg

The third row has no “comp” in it, so it is left alone and says so. Rules never touch the frame numbers or the extension.

plate_v03becomesplate

With Regex ticked: find _v\d+$ and replace with nothing — strips the version only when it is at the end.

shot_v03becomesshot_version03

Regex with a capture group: find v(\d+), replace with version\1.

Insert

Add text at the start, at the end, or at a character position.

Rules

1Insert↑ ↓ ✕
Text_v04
WhereAt the end

Files

Rename 2
Current name → new name
slateslate_v04
SH010_bty.[1001-1240].exrSH010_bty_v04.[1001-1240].exr

“At the end” means the end of the name, not the end of the filename — the version lands before the frame number, where it belongs.

bty_1001becomesTEX_bty_1001

The same rule set to “At the start”.

Remove

Delete a piece of text, or a number of characters from the start, the end, or a range.

Rules

1Remove↑ ↓ ✕
ModeFirst N characters
Count4▲▼

Files

Rename 2
Current name → new name
old_SH010_bty.jpgSH010_bty.jpg
old_plate_ref.jpgplate_ref.jpg

Counting characters, not words — which is why the preview matters. Four is right for “old_” and wrong for anything else.

SH010_bty_tempbecomesSH010_bty

The same rule set to remove the text “_temp” instead of a count.

Change case

UPPERCASE, lowercase, Title Case or Sentence case.

Rules

1Change case↑ ↓ ✕
Caselowercase
2Find & replace↑ ↓ ✕
Find
Replace with_

Files

Rename 2
Current name → new name
SH010 Notes V2.txtsh010_notes_v2.txt
Plate REF Wide.jpgplate_ref_wide.jpg

Two rules, top to bottom: lowercase first, then spaces to underscores. This pair is the built-in Tidy names preset.

Numbering

Write a counter into the filename — start, step, digits, separator, and whether it goes at the front or the back. It counts down the visible rows, so unticking one closes the gap rather than leaving a hole.

Rules

1Numbering↑ ↓ ✕
Start at1▲▼
Digits3▲▼
WhereAt the end

Files

Rename 3
Current name → new name
ref_wide.jpgref_wide_001.jpg
ref_close.jpgref_close_002.jpg
ref_top.jpgref_top_003.jpg

The counter follows the order of the list, so reordering the rows renumbers them — and unticking one closes the gap instead of leaving a hole.

Reorder segments

Split the name on a separator and rebuild it from a template. The app shows you what {0} {1} {2} actually resolved to for the first file, so it is not guesswork.

Rules

1Reorder segments↑ ↓ ✕
Split by_
Template{0}_{2}.{1}

Files

Rename 2
Current name → new name
N_1001_normal.exrN_normal.1001.exr
P_1001_position.exrP_position.1001.exr

Under the template the app prints what the numbers resolved to for the first file — {0}=N, {1}=1001, {2}=normal — so writing the template stops being guesswork.

Renumber frames

Change the frame numbers themselves. A render that came out 56-156 becomes 1001-1101 by typing one number. Gaps close by default; tick the box to keep them.

Rules

1Renumber frames↑ ↓ ✕
First frame1001▲▼
Keep missing frames as gaps

Files

Rename 2
Current name → new name
SH020_bty.[0056-0156].exrSH020_bty.[1001-1101].exr
take.[0056, 0057, 0060].exrtake.[0001, 0002, 0003].exr
slate.png

Row two had a gap at 58-59 and it closed. Frame 111 wants the name frame 56 is still holding — the app renames through temporary names, so that is ordinary rather than a conflict.

take.[0056, 0057, 0060].exrbecomestake.[0001, 0002, 0005].exr

The same rule with “Keep missing frames as gaps” ticked — the hole at 58-59 is preserved.

Frame padding

Change how many digits the frame number is written with. Sequences only — ordinary files are left alone.

Rules

1Frame padding↑ ↓ ✕
Digits5▲▼

Files

Rename 1
Current name → new name
shot.[001-003].exrshot.[00001-00003].exr
slate.png
notes.txt

Two of these three rows are not sequences, so there is no frame number to pad and the rule passes over them.

Putting them together

Real jobs, in one pass

These are the reason rules stack instead of taking turns. Each of these is a single press of Rename.

Rules

1Find & replace↑ ↓ ✕
Findcomp
Replace withcmp
2Insert↑ ↓ ✕
Text_v04
3Frame padding↑ ↓ ✕
Digits5▲▼

Files

Rename 2
Current name → new name
SH010_comp_bty.[1001-1240].exrSH010_cmp_bty_v04.[01001-01240].exr
SH010_comp_depth.[1001-1040].exrSH010_cmp_depth_v04.[01001-01040].exr

Three rules, one press of Rename. Each is handed what the one above it produced — which is why the padding rule sees a name that has already been renamed and versioned.

SH020_bty.[0056-0156].exrbecomesSH020_bty.[1001-1101].exr

The Renumber frames from 1001 preset — renumber, then repad to the studio's four digits.

SH010 notes v2.txtbecomessh010_notes_v2.txt

The Tidy names preset: lowercase, then spaces to underscores. Extensions are never touched.

plate_v03becomesplate_v01

The Reset version preset: strip whatever version is on the end, then put a fresh one on. Edit the number after loading it.

a.txt holds “a”, b.txt holds “b”becomesa.txt holds “b”, b.txt holds “a”

Swapping two names. Impossible one file at a time — the first rename lands on a name that is still occupied — so every batch that needs it goes through temporary names and back out. Rotations of any length work.

Before you press it

What the app refuses to do

Nothing touches the disk until you press Rename, and some things it will not do even then.
  • Two rows wanting one name

    Both are blocked and tinted red. Which one won would otherwise depend on iteration order.

  • A name that is already taken

    Blocked — unless that file is itself moving out of the way in the same batch, which the app works out for you.

  • Names Windows rejects

    Reserved device names (CON, NUL, COM1…), the characters < > : " / \ | ? *, trailing dots and spaces. Caught in the preview, not halfway through a batch.

  • Anything, while a row is in error

    The Rename button goes dead. A batch that half-succeeds leaves a folder in two naming schemes at once.

If it goes wrong

Undo survives closing the app

Every batch is written to a journal before the first file moves. Press Undo, or Ctrl+Z — and it still works after a crash, or tomorrow morning.
SH010_comp_bty.[1001-1240].exr
  1. Journal written to disk…\ZHiCK\Renamer\history
  2. 240 files renamed
  3. Put back, all 240

The journal lives in %LOCALAPPDATA%\ZHiCK\Renamer\history. A file you have since moved or deleted yourself is reported and stepped over rather than aborting the rest of the undo.

Faster

Keyboard

Three worth knowing.
Ctrl + Z

Undo the last batch

Ctrl + Enter

Rename

Delete

Drop the selected rows from the list

When you need it

Regex, without learning regex

There is no separate Regex rule — it was measured to be identical to Find & replace with the box ticked, so it was one more thing in the menu for nothing. Tick Regex and two things appear beside it.

Examples

Seven ready-made patterns named by what they do — “Remove _v01 from the end”, “Keep only the numbers”, “Swap the first two parts”. Picking one fills both fields, so you also see the pattern that produced it.

The ? button

A short table of the symbols you will actually meet, and one pattern taken apart piece by piece — including why $ matters.

Who made this

ZHiCK Studio

ZHiCK Renamer is built and given away by ZHiCK Studio, a compositing studio that makes tools for its own pipeline and then sells the ones worth selling. This one is free — it is how people find the rest.

zhickstudio.com/shop