Visual brain

A local-first library that saves, sorts, and tags design inspiration, all on your own machine.

Duration1 Week
Role & CompanyDesigner and Developer
Personal Project
DeliverablesChrome extension, desktop library, local and cloud AI analysis

The problem

I was collecting inspiration for this portfolio in a Figma page, and past about 70 images it slowed to a crawl. Every project's references sat in one pile, and I wanted the whole library on my own machine, not behind a login or a service that could disappear.

Approach

A library you own, that sorts itself, and stays out of the way of the work it holds.

Local first

Your images, library, and analysis live on your machine. No account, no connection needed.

AI sorts, you decide

Every image gets tagged for you, and you choose which model does it, or turn it off.

Stays out of the way

The interface steps back so the saved work is the loudest thing on screen.

Structure

Capture

A Chrome extension pulls images straight off the web into the library. Saving a reference takes one click instead of a screenshot and a drag.

Folders

Every project gets its own folder, with counts down the left side, so references stay sorted by what they're for.

AI analysis

Every image gets a title, description, tags, and its colors pulled out. It runs locally through Ollama by default, so nothing leaves your machine and no key is needed. Switch to Claude for stronger results, or turn AI off and fill images in yourself. Older images can be analyzed after the fact.

Browsing

A detail view with title, category, and tags for sorting, and a tight grid for when you just want to look.

Export for Claude

Any inspiration can be sent to Claude with its analysis attached, so when I want to design in that direction, I can hand over the reference in one step.

3000 → 440px

My first version had the same problem I built it to escape. The screenshots I save are often 3000 pixels wide and several megabytes each, and once the library filled up, the grid slowed to a crawl.

The cause wasn't downloads. It was the browser decoding every full-size screenshot just to show a small card. So now the server resizes each image to the size the interface actually needs and sends that instead.

Resized once, cached
Each size is made once and kept: 440px for the grid, 640px for the detail view.

Served as WebP
Light files instead of multi-megabyte originals.

Loaded on scroll
Grid images only load as they come into view.

Outcome

Open Source
Source

Free for any designer to use.

View the repo on GitHub ↗