See the fabric on your own window.
A curtain salon's client picks a fabric from a swatch and has to imagine it at home. Send a photo of the room and a photo of the fabric, and get the same room with those curtains. Only the curtains change: every other pixel of the photo stays as it was.
CurtainBot, a try-on bot for curtain salons, existed before the hackathon. This try-on engine on Meta models was built during it.
Try it on your room
Photos from a phone are fine. Take the room so the whole window is in the frame, and the fabric close up in daylight.
- Read the photosMuse Spark Open checks there is a window and a fabric, and reads the fabric's colour
- Find the windowSAM 3.1 outlines the window and any curtains already there
- Sew the curtainsMuse Image hangs curtains of your fabric on that window
- Lay them over your photoThe result is aligned on the window, matched to your photo's light, and only the curtains are pasted in
- Check the resultSAM 3.1 finds the new curtains, Muse Spark Open compares them with your fabric
What the models saw
| Call | Time | Cost |
|---|
How it works
Image generators are good at curtains and bad at leaving everything else alone. Asked to change one thing, they redraw the whole frame: furniture shifts, the view outside changes, colours drift. A salon can't charge for that.
So the generator never gets the last word. SAM 3.1 decides where curtains may go, Muse Image only supplies the curtains, and the engine pastes them into the original photo. Every pixel outside the curtains is the client's own photo. The fabric's colour is measured on the swatch and the curtains are pulled back to it, keeping their folds and shadows.
Two checks frame the generation. Before it, Muse Spark Open, Meta's open-weight model, refuses a photo with no window or no fabric, for free, and tells the client what to send instead. After it, the engine checks the window hasn't moved and the curtains stay in their area, and Muse Spark Open compares them with the fabric. A result that fails is generated again, and the client only ever sees one that passed.