Case study · Fashion and generative AI

A conversational stylist that knows your wardrobe

Named after the costume designer from The Incredibles, Edna is a fashion assistant you talk to like a friend with strong opinions. Tell her where you are going and she puts together complete looks from your taste, your past purchases and what is trending this week, finds every piece in a real catalogue, and keeps reworking the outfit as you react to it.

My part
Setting up the Flutter app and building its looks, wardrobe and profile screens
Team
Three students at IIT Guwahati
Platforms
Android and iOS, from one Flutter codebase
Built with
Flutter, Django, SQLite, GPT-3.5, U2-Net, BLIP-2, DistilBERT

01 The brief

The problem

The brief, in short

The challenge was to build a generative AI fashion outfit generator that changes how people discover and put together personalised outfits, and to do it in a natural, conversational way. It should draw on past purchases, browsing data and social media trends to offer tailored, on-trend recommendations, and understand each person’s preferred style, colours and favourite brands.

Getting dressed for an occasion is a surprisingly hard search problem. A store’s search box understands “black heels” perfectly well, but it has no idea what to do with “something for a friend’s sangeet that is festive without being loud”, and it certainly does not remember that you only wear three-quarter sleeves or that you already own the perfect pair of earrings. So people end up translating their own taste into keywords, one item at a time, and hoping the pieces work together.

Edna starts from the other end. The conversation is the interface, so you describe the occasion the way you would to a friend and let Edna do the translating. She already knows your fit, your colours and your budget from what you have bought and browsed, she keeps an eye on what is in fashion this season, and she answers with whole outfits instead of single products. If something is off, you just say so and she tries again.

Distilled, the brief asked for

A generative AI fashion recommender you can talk to

Built on

  • Purchase history
  • Browsing data
  • Social media trends
  • Preferred style, colours and brands

With the focus on

  • Personalisation
  • Smart relevance
  • A deeper understanding of the user
  • Iterating until they are happy

02 The brief

What Edna does

We broke the brief into six use cases and ranked them from P0 to P5, and the order says a lot about the product: conversation comes first, the wardrobe follows close behind, and everything else builds on those two.

P0

Personalised looks

Talk through an occasion and get complete outfits shaped around your preferences, the event, your body type and your style.

Chat
P1

Outfit of the day

Open the app to a look for the day, put together from clothes you already own, so there is one less decision to make in the morning.

Wardrobe
P2

Digital wardrobe

Add clothes with a photo or a few words, and Edna mixes what you own with new pieces whenever she styles you.

Photos
P3

Wardrobe gaps

Edna looks for what your wardrobe is missing and suggests the few pieces that would make it work for more occasions.

Wardrobe
P4

Feedback and refinement

React to a look in plain words and Edna reworks it, keeping what you liked and changing what you did not.

Looks
P5

On-trend suggestions

The looks lean on what is popular right now, so they stay current without you having to follow every trend yourself.

Trends

03 The product

The app

Edna is a Flutter app for Android and iOS with four main places: the chat where looks are made, a page for each look with real products, the wardrobe, and a page that shows everything Edna has learned about you. The screens here are rebuilt from the designs, with drawings standing in for the product photos.

9:41

Ball Dance Gown

A

You

I need a ball gown for a dance on Saturday

EdnaGPT

Ah, my discerning fashion enthusiast! A ball gown, you say? How utterly thrilling! But of course, I must know a few details to truly tailor my recommendation to your impeccable taste.

Are you envisioning a classic and timeless elegance, a daring avant-garde statement, or perhaps a harmonious blend of the two? And do tell me, what hues and fabrics make your heart skip a beat?

You

Timeless in lavender or sage green

EdnaGPT

Marvelous choices, darling! Lavender and sage green exude sophistication and grace.

Now, let me conjure up some splendid options for your consideration:

Click to Expand

Do any of them resonate with your inner fashionista, or would you like Edna to weave her creative magic and conjure up some alterations to better suit your desires? Feel free to share your thoughts, and together we shall create a masterpiece that will leave everyone breathless!

Type here!
9:41

Look 1

EdnaGPTSoft lavender and pearls keep it timeless, and black heels add a little drama.

Full length ball gown
Go to site ↗

₹4993.8 (78)

Embroidered Georgette Stitched Anarkali Gown

Go to site ↗

₹15,4993.8 (78)

Embroidered Georgette Stitched Anarkali Gown

Go to site ↗

₹2,1994.1 (316)

Sage Tulle Strapless Ball Gown

Lavender clutch
Go to site ↗

₹6494.2 (1,031)

Suede Envelope Clutch

Go to site ↗

₹8993.9 (204)

Satin Box Clutch with Chain

Black ankle strap heels
Go to site ↗

₹1,2994.0 (2,410)

Ankle Strap Stilettos

Go to site ↗

₹9993.7 (88)

Block Heel Sandals

Pearl bracelet
Go to site ↗

₹3494.4 (612)

Pearl Stretch Bracelet

Did you like our suggestions?

I like itCould be better
Add look to cart
Type a message
9:41

Your Wardrobe

A
Outfit of the day
White ribbed crop top Black high-waisted jeans Black leather jacket Black slip-on sneakers Silver strap watch

EdnaGPT

Effortless elegance: A white crop top and black high-waisted jeans complemented by a sleek leather jacket, slip-on sneakers, silver accessories.

Gap Analysis

Get more out of your current wardrobe by adding a few items

Articles

Tops

T-Shirts3 Shirts2 Crop Tops2 Tank Tops2

Traditional Attire

Sarees2 Kurtas2 Salwar Kameez2

Bottoms

Jeans3 Trousers2 Skirts2 Palazzos2

Dresses

Midi Dresses2 Maxi Dresses2 A-Line Dresses2
+
9:41

About You

A
Your profileFilled in from your chats and orders

Basic Information

Gender
Female
Age
23 years
Height
175 cm
Top size
M

Your Preferences

  • ColorBlack
  • PatternCheckers
  • Sleeve lengthShort
  • Fabric PreferencesKhadi
  • Fit and SilhouettePear Shaped
  • Neckline PreferencesDeep V neck
  • ₹
    Budget RangeMid - High Range
  • Style AestheticsRustic Modern
  • Fit preferencesSlim Fitting
  1. 01

    Chat

    Every conversation starts with an occasion. Edna replies in character, a little theatrical and very sure of herself, and asks about the style and colours you have in mind before she commits to anything. Once she knows enough, she sends her looks as a small collage, and the conversation gets a title of its own, such as “Ball Dance Gown”, so you can pick it up again later from your history.

  2. 02

    Looks

    Opening a look lists every item in it, and each item comes with several real products from the catalogue, with the price, the rating and a link to the store, so you can choose between the ₹499 gown and the ₹15,499 one. At the bottom you can tell Edna whether you liked the suggestions, ask for a change right there in the message box, or add the whole look to your cart in one go.

  3. 03

    Wardrobe

    The wardrobe opens with an outfit of the day made only from clothes you own, with a line from Edna on why it works. Below it, gap analysis looks at everything you have and suggests the few pieces that would get more out of it, and the rest of the screen is your clothes, grouped into tops, traditional wear, bottoms and dresses, with the colours in each group shown as small dots.

  4. 04

    About you

    Everything Edna works out about you is laid out on one page, from basic details like age and height to preferences for colour, pattern, sleeve length, fabric, neckline, fit, style and budget. Showing it openly was a deliberate choice, because an assistant that learns from your shopping should let you see exactly what it has learned.

04 Proposed approach

How it fits together

The app itself does very little thinking. It sends requests to a Django server, the server talks to the language model and to our own trained models, and a SQLite database, hosted separately, is shared by both. Pick one of the five flows to follow a request from your thumb to the models and back.

    The database

    The schema follows the app almost screen for screen. A chat holds its messages and the looks it produced, a look holds its articles, and every article holds the products found for it. The wardrobe has its own branch of categories, articles and products, and two small tables keep the preferences and the profile that Edna fills in about you. Hover over or tap a reference to see where it points.

    Chats

    Chats

    • title
    • time
    • messages1 → n
    • looks1 → n

    Messages

    • typetext or images
    • text
    • image_urls[string]
    • looks1 → 1

    Looks

    • name
    • articles1 → n

    Articles

    • name
    • products1 → n

    Products

    • name
    • price
    • rating
    • no_of_ratings
    • link
    • image_url

    Wardrobe

    Categories

    • name
    • articles1 → n

    Articles (Wardrobe)

    • name
    • image_url
    • products1 → n

    Products (Wardrobe)

    • description
    • image_url
    • colors[]

    Outfit Of The Day

    • products1 → n

    You

    Preferences

    • title
    • value
    • type

    User Profile

    • title
    • value

    05 Proposed approach

    From a message to a look

    The heart of Edna is a multi-heuristic prompt generator. Instead of passing your message to the model as it is, it wraps the message in everything Edna knows about you, from age and region to fit, favourite colours and budget, and spells out exactly what shape the answer must take so that the app can read it.

    Age Sleeve Fav brands Weight
    Prompt
    Generator
    Fit Gender Budget Region Fav colour your
    message
    GPT-3.5
    Parser
    Look 1 Look 2 Look 3
    Product
    search

    Red T-shirt

    Blue jeans

    Yellow shirt

    Black trousers

    Hawaiian shirt

    Casual shorts

    1. Prompt generatorYour traits and preferences, along with the trends of the moment, are written into a prompt around your message.
    2. GPT-3.5The model answers through its API, in a fixed structure that the prompt describes down to the field names.
    3. ParserThe answer is split into looks, each look into items, and each item into a short description that works as a search.
    4. Product searchEvery item of every look is searched in an e-commerce catalogue for its name, price, rating, thumbnail and link.

    Try the prompt generator

    Switch traits on and off and watch the prompt change. The client is based on the test profile written into the app’s prompts.

    Prompt~0 tokens

    
                

    Expected answerparsed into looks

    "Title": "Goa Trip",
    "Issues": "",
    "Look 1": {
      "items": ["shirt", "shorts", "hat", "sandals"],
      "shirt": "Light blue linen shirt",
      "shorts": "Khaki chino shorts",
      "hat": "Straw fedora",
      "sandals": "Brown leather sandals",
      "Explanation": "Relaxed and breezy for exploring Goa, and the light colours keep you cool."
    },
    "Look 2": { … }

    Asking for the structure inside the prompt is what made the rest possible. GPT-3.5 was told to answer only in JSON, to list the items of each look before describing them, to keep every explanation under twenty words and to flag any problem with the request, so a gibberish message comes back as an issue instead of a broken look.

    One item per component keeps the searches clean, and asking for details like colour and sleeve length in every description gives the catalogue search something specific to match. For each item the search returns several products, which is why every look offers a few versions of each piece at different prices and ratings.

    07 Proposed approach

    A wardrobe from photos

    A stylist that works from your wardrobe is only useful if filling the wardrobe is painless, so Edna takes either a few words or a photo. Typing “white ribbed crop top” is enough, and a photo goes through two models that work out what is in it and describe each piece the way a person would.

    Photo uploaded to the wardrobe

    U2-Net

    Cloth segmentation

    Upper body
    Lower body

    BLIP-2

    Fashion-aware captioning

    Waiting for a photo

    • Shirtsred check shirt
    • Jeanslight blue denim jeans
    1. UploadYou add clothes by describing them or by uploading a photo, even one with more than one piece in it.
    2. SegmentA U2-Net model, fine-tuned on the iMaterialist fashion dataset, separates the different pieces of clothing in the photo.
    3. CaptionEach piece goes to BLIP-2, which captions it with its colour, pattern and type, and the result is filed under the right category.

    Why U2-Net

    U2-Net nests small U-shaped blocks inside one large U, so it looks at fine detail like collars and cuffs and at the overall shape of a garment at the same time. That makes for clean outlines around clothes, which matters when every outline becomes a crop for the next model.

    Why BLIP-2

    BLIP-2 connects a frozen image encoder to a large language model through a small Q-Former, so it describes a garment in natural words, “red check shirt” rather than a class label. Those words drop straight into the wardrobe and, later, into the prompt.

    08 Results

    Performance

    Edna had to be cheap enough to run for a lot of people and light enough to live on an ordinary phone. These are the numbers for typical use.

    RAM

    ~84 MBon Android
    ~69 MBon iOS

    for typical use of the app

    Database

    50–100 KB

    of space per user

    Network

    <3 KB

    of bandwidth per recommendation

    Latency

    Server call~400 ms
    LLM call~15 s

    LLM usage

    ~2,000

    tokens per recommendation

    Cost

    ~₹5

    per active user a month, from about 2,000 tokens for every recommendation

    The number that stands out is the fifteen seconds a recommendation takes, and almost all of it is spent waiting for the language model. Everything around that call is quick, because the app only ever moves text and links: a full recommendation is under 3 KB on the wire, and a user’s entire record fits in 50 to 100 KB.

    Built to scale

    The recommendation algorithm grows linearly with the size of a user’s data and the length of their prompts. The server is written in Django, which is designed to scale, and the SQLite database can move to MySQL or PostgreSQL when it needs to.

    Built to be trusted

    The database and the APIs are encrypted, every trait Edna extracts is visible to the user, and every product comes from a single e-commerce catalogue, so the looks are ready to plug into a real store.

    09 Results

    Limitations

    Edna works, but it is worth being clear about where it is weakest, and most of its limits trace back to one decision: putting a very large model behind an API instead of a small one on the phone.

    1. Model trade-off

      A small model on the phone would be quick and private but makes more mistakes and copes badly with unusual requests. We chose a large model behind an API, hosted on a cloud service, and accepted the cost and the wait that come with it.

    2. Needs the internet

      Every look depends on the server and the language model, so without a connection Edna cannot style anything at all.

    3. Compute and storage

      With a large user base the compute bill grows quickly, because each recommendation is a call to a large model.

    4. Model bias

      Language models carry the biases of the data they were trained on, which can quietly reinforce certain fashion standards and leave out styles that deserve a place.

    5. Catalogue access

      Without an official API for the product catalogue, search results are less accurate than they could be, and an item can come back as a near miss.

    10 Results

    What comes next

    Three ideas came out of building Edna that would make it noticeably better, and the app already has an empty screen set aside for the third.

    Virtual try-on

    An AR view that shows the suggested outfit on your own body in real time, so you can see how a look sits before you buy a single piece of it.

    Better onboarding

    A friendlier start that asks about your taste up front through quick this-or-that comparisons, so Edna has a strong picture of you from the very first message.

    Swipe or tap

    Swipe to choose

    Looks shown one at a time to keep or skip with a swipe, which makes choosing feel like a game and gives clean signals for fine-tuning the models. Try it above.

    11 Looking back

    Looking back

    What I enjoyed most about Edna is how little of it is the model. GPT-3.5 does the imaginative part, but the product lives in everything around that one call: the prompt that carries a person’s taste into it, the structure that makes its answer readable, the search that turns a description into something you can buy, and the screens that let you push back. Those pieces decide whether a look feels like it was made for you.

    It also taught me to treat the cost of a model as part of the design from the start. Knowing that a recommendation takes about 2,000 tokens and fifteen seconds shapes the whole product, from asking for a compact, structured answer to working out that Edna costs around ₹5 per active user a month, which is the number that decides whether an idea like this can ever be more than a demo.

    Thanks for reading. Edna’s code, from the chat to the wardrobe, is on GitHub.