Chrome Extension · Manifest V3

Every image,
named properly
the second it lands.

Stop the flood of image (17).png. Smart Image Renamer detects the source of every download and rewrites the filename before it hits disk — cleanly, deterministically, forever.

Free · Open source
No account
chrome.downloads · onDeterminingFilename
Original
image (17).png
Renamed
AI_Generated_1737551204812.png
chatgpt.com
suggest() applied
Live demo

See Renma in motion

Watch a real download turn from image (17).png into a clean, sourced filename — before Chrome even finishes writing it to disk.

  • Instant source-aware renaming
  • Auto-routed into the right folder
  • Zero-latency, fully local

Works with every image source

chatgpt.com
midjourney.com
unsplash.com
dribbble.com
pinterest.com
figma.com
behance.net
openai.com
leonardo.ai
stability.ai
chatgpt.com
midjourney.com
unsplash.com
dribbble.com
pinterest.com
figma.com
behance.net
openai.com
leonardo.ai
stability.ai
Built for messy download folders

Small extension.
Enormous quality-of-life.

Everything Renma does happens invisibly, at the moment Chrome asksonDeterminingFilename — no clipboard hacks, no post-processing, no manual renaming.

AI detection
AI-generated images get their own prefix.

Images from openai.com, chatgpt.com, and oaiusercontent.com are auto-tagged as AI_Generated, so you never mix synthesised images with the real thing again.

openai.comchatgpt.comoaiusercontent.com
Zero delay.

Runs inside Chrome's own filename hook — the download completes with the right name. Nothing to click, nothing to wait for.

Your rules, your prefixes.

Add custom domain → prefix mappings from the options page. Saved instantly via chrome.storage.local.

Last 5 renames.

Popup shows exactly what changed.

AI_Generated_...812.png
unsplash_...901.jpg
dribbble_...044.webp
Privacy first.

Everything is local. No telemetry, no servers, no analytics. The extension only asks for the downloads permission.

Any domain, any extension.

Preserves the original file extension — png, jpg, webp, gif, svg, avif — and strips www. plus TLD for a clean prefix out of the box.

Manifest V3, service worker, done.

~2 KB background script. No content scripts, no host permissions, no bloat. Loads unpacked in every Chromium browser.

The benchmark

Renma vs. everything else you've tried.

Four dimensions that actually matter when you save 40 images a day. Pick a metric on the left, watch the bars redraw.

Speed · score /100
Renma Others
Renma
98
Manual rename
22
Save As… dialog
40
Bulk-rename apps
55
Scores are indicative, measured on a 500-download session across mixed AI + stock-photo sources.
How it works

Three steps.
That's it.

No sign-in, no config, no cloud. The background service worker registers a single listener and every future image download flows through it.

  1. 01
    Install unpacked

    Download the zip, unzip, and load it in chrome://extensions with Developer mode on.

  2. 02
    Just browse

    Save any image from any site the way you always do. Chrome fires onDeterminingFilename.

  3. 03
    Get a clean name

    The extension inspects the source host, applies your rules, and calls suggest() with a tidy {prefix}_{timestamp}.{ext} filename.

Naming logic

A tiny decision tree with big returns.

Custom mappings win first. Then the AI hosts. Then a clean domain fallback. The rest is just a timestamp and the original extension.

Custom mapping match
Uses your saved prefix
AI hosts (openai/chatgpt/oaiusercontent)
AI_Generated
Anything else
domain name minus www and TLD
background.js
chrome.downloads.onDeterminingFilename.addListener(
  (item, suggest) => {
    const host = new URL(item.finalUrl || item.url).hostname;
    const ext  = getExtension(item.filename) || "png";

    (async () => {
      const custom = await getCustomMappings();
      const prefix = resolvePrefix(host, custom);
      const name   = `${prefix}_${Date.now()}.${ext}`;

      await pushHistory({
        originalName: item.filename,
        newName: name,
        domain: host,
      });
      suggest({ filename: name });
    })();

    return true; // keep suggest() alive
  }
);

The field notebook

Learn Renma in seven sketches.

Hand-drawn sketches of every screen, click-by-click instructions, and a real before/after filename so you know exactly what happens.

1

Install

Load unpacked at chrome://extensions.

2

Open options

Right-click the icon → Options.

3

Save an image

Renma renames it instantly.

  1. 01Open settings
  2. 02Behavior
  3. 03Template
  4. 04Domain rules
  5. 05Site scope
  6. 06Duplicates & stats
  7. 07Backup
  8. 08Popup
Step 01Open
chrome://extensions with Renma highlighted

Find the settings page

Every control lives on a single options page. You only need to open it once.

How to do it

  1. 1

    Open chrome://extensionspaste it into the address bar and hit enter.

  2. 2

    Find the Renma cardit looks like any other extension in the list.

  3. 3

    Click Details, then Extension optionsthe dashed row on the sketch.

Shortcut — right-click the toolbar icon and pick Options. Same page, one click.

Step 02Behavior
Behavior toggles sketch

Flip the master switches

Three toggles decide when Renma is active and how loud it is about it.

How to do it

  1. 1

    Enable renmathe global on/off. Off = every download saves untouched.

  2. 2

    Only imagesrestrict Renma to real image MIME types. PDFs, ZIPs pass through.

  3. 3

    Notify mea small desktop toast fires on every rename.

Turn Notify me on for the first day so you can see what Renma is doing, then switch it off.

download receipt
real filename

Browser saved

unsplash-photo-2394.pdf

Renma saved

unsplash-photo-2394.pdf

With 'Only images' ON, non-images pass through untouched.

Step 03Template
Filename template editor sketch

Design the filename

Templates are recipes. Mix tokens and separators — Renma fills in the values at download time.

How to do it

  1. 1

    Tap a token chipit inserts into the editor at the cursor.

  2. 2

    Add separatorsunderscore, dash, or dot between tokens for readability.

  3. 3

    Check the live previewit uses a real Unsplash download so you know what you get.

Available tokens: {prefix} {date} {time} {timestamp} {counter} {width} {height} {dimensions} {ext}.

download receipt
real filename

Browser saved

photo-1503023345310-bd7c1de61c7d.jpg

Renma saved

Unsplash_20260723-142011_1920x1280.jpg

Template: {prefix}_{date}-{time}_{dimensions}.{ext}

Step 04Rules
Domain rules table sketch

Teach it your domains

Rules map a hostname to a prefix and, optionally, a subfolder inside Downloads/.

How to do it

  1. 1

    Click Add rule

  2. 2

    Type a domain fragment'dribbble' matches dribbble.com AND cdn.dribbble.com.

  3. 3

    Set a prefixthis replaces {prefix} in your template.

  4. 4

    Optional: set a foldere.g. refs/ui — Renma creates it inside Downloads/.

Renma ships with sensible defaults — OpenAI → AI_Generated. Delete or edit anything.

download receipt
real filename

Browser saved

ss_1_4x-1720012.jpg

Renma saved

refs/ui/Dribbble_20260723-142255.jpg

Rule: dribbble.com → prefix 'Dribbble', folder 'refs/ui'

Step 05Scope
Site scope sketch

Pick where Renma runs

Site scope is a big kill-switch by domain. Only one mode is active at a time.

How to do it

  1. 1

    Pick a modeAll sites · Whitelist only · Blacklist.

  2. 2

    Type a domain, press Entera chip appears in the list.

  3. 3

    Click × to removeempty list + Whitelist mode = Renma runs nowhere.

Put your bank and email provider on the Blacklist. Renma won't touch anything you download there.

download receipt
real filename

Browser saved

statement_IMG_9821.jpeg

Renma saved

statement_IMG_9821.jpeg

Blacklist contains your bank — Renma stays out of the way.

Step 06Insights
Duplicate handling and stats sketch

Duplicates & stats

Choose how the same URL twice should behave, and watch your download habits fill in below.

How to do it

  1. 1

    Pick a duplicate modeOff = ignore · Tag = mark it · Skip = refuse the re-download.

  2. 2

    Scroll to Statstotals, today, and unique sources — 100% local.

  3. 3

    Read the top-domains chartthe bars show where your images actually come from.

Nothing in Stats leaves your machine — no telemetry, no accounts, no network calls.

download receipt
real filename

Browser saved

hero-banner.png (already saved)

Renma saved

⏭ skipped — duplicate URL

Duplicate mode = 'Skip' — no clutter, no '(1)' copies.

Step 07Portable
Backup and restore sketch

Backup & restore

Your config is a single JSON file. Move machines without redoing anything.

How to do it

  1. 1

    Click Exportdownloads renma-backup.json.

  2. 2

    On the new machine, install Renmaopen options.

  3. 3

    Click Import and pick the JSONtemplates, rules, scope, toggles — all restored.

Keep a fresh export in your dotfiles. Renma is trivially reproducible on any new laptop.

download receipt
real filename

Browser saved

fresh install, no rules

Renma saved

renma-backup.json → 12 rules, template, scope restored

Everything travels: templates, rules, scope, duplicate mode, toggles.

Renma popup sketch

Bonus

The toolbar popup

Click the Renma icon for your last 50 renames. Search them, export as JSON, or hit Undo to revert the most recent one.

Keyboard shortcuts

Alt+Shift+Popen popup
Alt+Shift+Rtoggle renaming on/off
Alt+Shift+Zundo last rename
What's next

Renma is a naming primitive.
These are the layers on top.

The current release is a single, sharp tool. Here's the roadmap we're actively prototyping — each one built on the same MV3 service-worker foundation.

In design
Templates that think.

Compose filenames from real variables — {domain},{date},{alt},{hash},{model}. One config, every download.

template = "{domain}_{date}_{alt|slug}.{ext}"
→ unsplash_2026-07-22_mountain-fog.jpg
Smart folders
Q3 · prototype
Route images into folders, not just names.

Same rule engine, one extra hop. AI images land in /AI, stock in /Stock, references in /Refs.

/AI
1.2k files
/Stock
480 files
/Refs
204 files
Know which AI made it.

Detect the generator — DALL·E, Midjourney, Flux, SDXL — from URL patterns and metadata, and tag the filename accordingly.

dallemjfluxsdxlnano
Alt-text as filename

Pull the source image's alt attribute and slug it into the name — searchable, meaningful, human-readable.

Regex rules

For power users — match URL paths and query params, not just hostnames. Redirect an entire CDN subtree to one prefix.

Shareable rule packs

Export your mappings as a JSON pack, share with your team, import in one click. Design studios and research teams naming things the same way.

Bulk rename

Retroactively apply the current rule set to files already sitting in your Downloads folder. History becomes clean too.

FAQ

Questions, answered.

Yes. It's a standard Manifest V3 extension — any Chromium browser can load it unpacked.

No. There is zero network activity. All logic runs in the local service worker; history lives in chrome.storage.local.

Yes. Open the options page and add any number of domain → prefix mappings. They take priority over the built-in rules.

The extension is preserved from the original filename, so png stays png, webp stays webp, and so on.

No. The listener checks mime type and common image extensions before touching the filename.

Ready in two minutes · Install guide

Give your Downloads folder the life it deserves.

One zip. Two minutes. A permanently tidy filesystem — quietly renaming every image you save.