Skip to main content

Groups & metadata

How grouping works in Renamerly. Manual buckets, SKU-keyed groups, multi-key strategies, and the unified Set Metadata flow.

Last updated April 27, 2026

A group is a set of images Renamerly treats as one unit — same group header, same default values, same export bucket. There is one model and three ways to drive it:

  • Manual groups — a user-named bucket (the simplest path; no schema required). See Manual groups.
  • Keyed groups — bucket by any metadata key the active filename format references (e.g. sku, brand, category).
  • Multi-key groups — combine keys into a composite axis (e.g. brand + product) when a template declares a groupBy array.

All three resolve through the same store path and the same renderer; the difference is just which key the group-by selector points at.

Choosing how to group

The toolbar's Group by dropdown is the single switch. It's always available once the workspace has images.

Manual groups

User-named buckets stored on metadata.group. Top of the dropdown.

Pick this when the natural unit is "this set of images belongs together" and the bucket name is for human eyes only — hero-shots, cabin-interior, march-shoot. Created with the Group button on the selection toolbar.

Template default

Whatever groupBy axis the active template declared.

Templates can pin groupBy: ['sku'] or ['brand', 'product'] so every workspace using that template lands on the right grouping out of the box. Override at any time by switching the dropdown to a different axis.

Per-key options

Every metadata key the active filename format references.

Build a format that uses {val:brand} and {val:category} and the dropdown surfaces those keys as one-click grouping options. SKU is a metadata key like any other — {sku} shows up here when your format references it.

The unified Set Metadata flow

Every per-image value — including SKU — is written through one path: the selection toolbar's Set Metadata picker.

  1. Select the rows you want to write to

    Multi-select via row checkboxes or Shift-click. The selection toolbar appears at the top of the table.

  2. Click Set Metadata and pick a key

    The picker lists every token the active filename format references — sku, descriptor, brand, color, anything. Pick the key you're filling.

  3. Type the value and apply

    The input grows context-specific affordances: typing into sku reveals an autocomplete of every existing SKU plus a placeholder showing the active SKU pattern; the value is sanitized (lowercase, hyphenated, alphanumeric-only) before being written. Other keys go through descriptor-style sanitization.

SKU is no longer special.

Earlier versions of Renamerly had dedicated Assign SKU / Change SKU / Remove SKU buttons. Those are retired. SKU lives in image.metadata.sku like every other metadata value, the renderer treats {sku} and {val:sku} interchangeably, and bulk SKU writes go through the same Set Metadata picker as every other key. The only SKU-specific behaviour that survives is value-time sanitization — typing Nike Air Max 90 still produces the SKU nike-air-max-90.

Sanitization

Values are normalized at write time:

  • SKU — lowercased, spaces and underscores converted to hyphens, non-alphanumeric stripped (except -), consecutive hyphens collapsed.
  • Descriptor and other free-text keys — same pipeline, applied through the descriptor sanitizer.
  • Manual group names — whitespace collapses to -; case is preserved at storage time and decided at filename render time via the token's case= option.

The original display value is preserved in the UI so you still see what you typed; the rendered filename uses the sanitized form.

Per-token case + separator overrides

The filename engine applies case= and sep= token options at render time without mutating the stored value. Switching templates round-trips cleanly — e.g. {sku|case=upper|sep=_} re-emits nike-air-max-90 as NIKE_AIR_MAX_90 with no edit to the underlying SKU.

Group header

Every group has a header that does three things:

  • Display the group's identity — the group key (or manual bucket name) and the row count.
  • Edit defaults — whatever metadata keys the active filename format references show up as inline inputs. Typing into a default cascades the value down to every member of the group, but each row's per-image value still wins if it was explicitly set.
  • Rename (manual groups only) — click the bucket name to edit it inline. Commit on Enter or blur, cancel on Escape. The new name flows to every member's metadata.group.

There is no overflow menu, no Apply-to-all button, no group-level Auto-fill, no per-group export, no group-level template apply. Defaults autosave; per-row overrides win.

Reordering within a group

Drag any row inside a group to change its position. The new order drives every positional token ({position}, {seq}, {seq|scope=batch}) in your active format and the manifest order in the exported ZIP.

Dragging across groups reassigns the row's group key — covered in Grouping and reordering.

What happened to "ungroup", "delete group", and the group overflow menu?

Removed in the April 2026 simplification pass. The reasoning: every gesture those buttons offered is achievable through the same path that creates groups in the first place.

  • Ungroup — re-select the rows, Set Metadata → group (or the keyed-group equivalent), apply an empty value.
  • Delete group — select the rows, Delete in the selection toolbar.
  • Apply Template per group — apply at the workspace level (Format menu → Apply Template), which preserves your existing metadata.

One model, one mental path. Less surface area to learn, fewer asymmetric gestures to remember.