Wardrobe: The Local-First AI Closet That Turns Photos Into a Living Asset Pipeline
Behind the scenes, one upload becomes a staged job, a reviewed cutout, a modeled preview, and a searchable library that never leaves your machine.
- Wardrobe is less an AI fashion app than a local asset pipeline that turns messy clothing photos into structured inventory.
- Its core trick is a stateful import flow that stages, reviews, and persists each garment as it moves from crop to cutout to modeled preview.
- The repo keeps durable wardrobe state on the user’s machine while using cloud AI only for the expensive transformation steps.
- The .agents directory makes the project legible to both humans and tools, which is the quiet hint that this is software built for shared operation.
From Closet Photos to a Managed Asset Pipeline
Most closets are digital junk drawers. You have photos, screenshots, and maybe a few tags, but nothing that behaves like a working inventory. Wardrobe starts from a sharper premise: clothing photos are raw material, and the real job is to turn them into assets you can search, review, and reuse.
That is why the repo feels closer to a production system than a consumer app. One upload does not end in a thumbnail. It moves through staged jobs, local persistence, image cleanup, modeled previews, and a permanent record in data/.
Why This Is Local-First, Not SaaS-First
Wardrobe uses cloud AI for the heavy lifting, but it does not turn your closet into someone else’s database. The source library and processed images stay on disk. In practical terms, that means the app can feel private, durable, and inspectable instead of opaque.
| Workflow | Where the data lives | How the AI is used | Human review? | Best for | Main tradeoff |
|---|---|---|---|---|---|
| Manual photo folders | Your device, but unstructured | None | No | Quick dumping of pictures | Search and reuse are weak |
| Generic cloud closet apps | Mostly on a vendor server | Often for tags or recommendations | Sometimes | Easy sync across devices | Privacy and long-term ownership are limited |
| Wardrobe | Local files in data/ plus generated assets | For extraction and modeled previews | Yes, between stages | Private, structured clothing libraries | You still manage a local app and its imports |
See the original post â Quick start â ï¸ The importer stays disabled until you add OPENAIAPIKEY to .env and place a PNG reference photo of yourself at data/model-reference.png.
The Heart of the Repo: A Job State Machine
The real engine sits in scripts/import-job-api.mjs. It creates a UUID-backed job directory inside data/, then moves the upload through three stages: crop, garment, and modeled. Each step writes intermediate files, which means the import is not just a transient operation. It is a sequence of durable artifacts.
// Conceptual shape of the import flow
upload -> crop detection -> garment cutout -> modeled preview
-> save each stage under data/<uuid>/
-> expose progress through Vite middleware
-> wait for human approval between stages
That design matters because it turns the import into a recoverable process. If a stage fails, the job still has a footprint. If the review approves a result, the next stage can reuse the saved output instead of starting from scratch.
Why Human Review Is Built Into the Flow
Wardrobe does not pretend the AI is the authority. The UI maps backend state into readable statuses, then stops for approval at the points where judgment matters. That makes the product feel less like automation theater and more like a careful production tool.
This is a strong product choice. Automatic systems are fast, but they are often brittle when the output becomes personal. Clothing is personal. A review gate turns the pipeline from a guess into a conversation.
The Frontend Treats Images Like Data, Not Decoration
The frontend is not a pile of cards and thumbnails. It uses image optimization, canvas-based palette extraction, and responsive rendering so that garments remain useful as the library grows. The UI is built around the assets themselves, not just around a catalog view.
// The browser helps turn pixels into metadata
const palette = extractPalette(image)
const swatches = sampleImageColor(image)
const thumbnail = OptimizedImage({ src, widths: [240, 480, 960] })
// Result: faster browsing and richer filtering without a separate media backend
That matters because Wardrobe is not trying to be a prettier photo wall. It is trying to make each item queryable. Color, cutout, modeled preview, and source photo all become facets of the same record.
The Agent-Ready Repo Is the Quietly Radical Part
The .agents directory is a clue about the project's intent. Wardrobe is not only organized for humans reading the codebase. It is organized so an AI tool can operate the same workflows through structured scripts and skills.
Import with Codex This repo includes two Codex skills: one imports clothes and generates modeled item photos; the other styles complete outfits and generates a modeled lookbook.
That is more than a convenience layer. It suggests a future where software exposes a clear operating surface for both people and agents. The repo keeps that interface small, explicit, and close to the filesystem.
Wardrobe vs. the Usual Closet App
| Pattern | What it optimizes for | What you give up |
|---|---|---|
| Manual closet folders | Simplicity | Search, structure, and scale |
| Typical closet SaaS | Convenience and sync | Ownership and local control |
| Wardrobe | Private structure plus AI assistance | A local app workflow and import discipline |
The broader lesson is bigger than fashion. Personal software is drifting toward a split architecture: local state, cloud inference, and human oversight. Wardrobe is a clean example of that pattern because it does not hide the machinery. It makes the machinery the product.





