Side Projects
Browser Profile Icons: Telling Your Chrome, Edge and Firefox Profiles Apart at a Glance

Part 4 of the thread Desktop tinkering
- What it is
- Desktop app
- My role
- Creator
- Year
- 2025
- Built with
- Python
- customtkinter
- Pillow
- JavaScript
- pytest
- A Python desktop app, ProfilePop, generates custom profile icons with your own text, colors, shapes and effects.
- Companion extensions for Chrome, Edge and Firefox handle profile switching, search, keyboard shortcuts and JSON export/import.
- There's a library of 59 icon templates across 11 categories, from Work and Coding to Gaming and Finance.
- Close the browser before generating icons. No Safari extension, and no automatic profile detection.
Once you've got more than two or three browser profiles, they start to blur together. Same browser icon on the taskbar, same default avatar, and you only find out you're in the wrong one after you've logged into something. A custom icon per profile fixes that, but making them by hand is a chore nobody wants to repeat.
browser-profile-icons is my answer to that. It's two things in one repo: a desktop app that makes the icons, and a set of browser extensions that help you manage and jump between profiles.
What it does
The desktop side is ProfilePop, a Python GUI built on customtkinter and Pillow. You pick a browser from the sidebar, set up the look in the right-hand panel, and hit "Generate All Icons." There's an optional step to create desktop shortcuts that wear the new icons, which is the part that actually makes the taskbar readable.
What you can change:
| Option | What you get |
|---|---|
| Shapes | Circle, rounded, square, hexagon, badge |
| Colors | 20+ preset colors, with gradient support |
| Effects | Shadow, glow, border, opacity |
| Browsers | Chrome, Edge, Firefox, Brave, Opera, Vivaldi, Safari |
| Platforms | Windows, macOS, Linux |
Settings persist between runs, and you can export and import your profile configurations so you're not rebuilding them on a new machine.
The extensions
The other half lives in the browser. There are three extensions: Chrome and Edge on Manifest V3, Firefox on Manifest V2. They cover the same ground: add a profile, rename it, click to switch, search and filter by name, and back everything up to a JSON file. The Chrome one also hooks into the context menu and can show notifications.
Keyboard shortcuts are where it earns its keep. Alt+P opens it, and Ctrl+Shift+1, 2 and 3 jump straight to profiles. If you're the kind of person who tidies the bookmarks bar down to a handful of short labels, you'll probably like having profiles on hotkeys too.
Templates
Version 3.0 added a template library: 59 pre-built icons across 11 categories. Professional, personal, education, entertainment, creative, social media, business, productivity, finance, medical and legal, plus a general bucket. The extensions have a gallery where you can browse by category and apply one in a click.
The templates also live in a small Python module, icon_templates.py, if you'd rather script it. There are get_template(), get_templates_by_category() and search_templates() functions, so pulling the "work" template or everything in "professional" is one line each.
Using it
The desktop app runs from source:
git clone https://github.com/wesellis/browser-profile-icons.git
cd browser-profile-icons
pip install -r requirements.txt
python ProfilePop_Modern.py
The extensions load unpacked. In Chrome or Edge, open the extensions page, turn on Developer mode, click "Load unpacked" and point it at chrome-extension or edge-extension. In Firefox, go to about:debugging#/runtime/this-firefox, choose "Load Temporary Add-on" and pick the manifest.json in firefox-extension.
Tip
If icons don't generate, close the browser first. On Windows, permission errors usually go away if you run the app as administrator.
There's a pytest suite too (50+ tests, per the README) covering the templates, the extension manifests and the export format. pytest -v runs the lot.
Rough edges
Version 3.0 was mostly a cleanup. Earlier builds had a cloud sync feature, a Pro tier with payments, and some analytics code. None of it really worked, so it's gone, and I'd rather ship less that works than more that doesn't.
Heads up
There's no Safari extension (Safari's restrictions got in the way), and the extensions can't detect your existing browser profiles automatically because the browser APIs don't expose that. You add them yourself.
The extensions aren't on the web stores yet either. The build script produces store-ready packages, but publishing is still on the optional list, along with pulling the template gallery into the desktop app, pushing the library past 100 templates, a visual template creator and local sync between browsers.
It sits alongside my custom new tab page in the pile of small things I've built to make the browser a little less annoying. MIT licensed, so take it apart if you want.