↝ Year
2025
↝ Description
A place in the ancestry gallery, without having to sit still for a painter? For an exhibition about Annette von Droste-Hülshoff, I created a magic mirror that turns visitors into Biedermeier-inspired painted portraits. A custom Snapchat filter runs inside an iPad app I built in Swift, combining painterly style transfer with generated bodies and Gaussian-splat accessories. With budget and timeline constraints shaping the workflow, I brought together Lens Studio's generative tools, a little Python-based model cleanup and a distance-aware invitation to come closer. The result is a playful way to become part of the gallery, complete with a randomized wardrobe. Droste to impress, quite literally.
↝ Tools used
Looking at an ancestry gallery usually means looking at other people. For this exhibition, the idea was to turn that around: let visitors see themselves as a painted portrait from the era of Annette von Droste-Hülshoff, becoming part of the gallery rather than just standing in front of it. A little trip into the Biedermeier period, with considerably less waiting around for the paint to dry.
The interaction should feel like a magic mirror. You stand in front of it, recognize yourself, and discover what you might look like with a different outfit, a few accessories and a painterly finish. Keeping that recognizable connection to the person in front of the camera was just as important as the transformation itself.
Rather than building the whole face-filter system from scratch, I decided to use Snapchat's technology. They've spent the past decade and a half getting rather good at making things follow people's faces, so borrowing that foundation felt like a sensible decision. More time for the portrait, less time reinventing face tracking.
I developed the filter in Lens Studio and built a custom iPad app in Swift to host it. That brings the familiar technology into an exhibition setting: the visitor interacts with the mirror, while the app and filter take care of what's happening behind it.
The budget and schedule didn't leave room to model an entire historical wardrobe by hand. Instead, I put together an AI-assisted asset workflow using Lens Studio's generators. I found accessories I wanted to include in the portraits, then generated them as Gaussian splats: 3D representations made from lots of small, soft, overlapping splats rather than the usual polygon surfaces.
The previews here show some of that dressing-up kit on a neutral head: hairstyles, hats, collars and jewelry. Seeing each piece in isolation made it easier to judge what it brought to the portrait before combining it with the rest. There is quite a difference between a subtle necklace and a hat that decides to become the main character.
These accessories become part of the filter's mix-and-match wardrobe, giving the same visitor room to look rather different from one combination to the next.









Accessories alone would make this more of a digital dressing room than a painted portrait. To bring everything into the same visual world, I also created a painterly style transfer with Lens Studio's generative tools. It gives the camera image that painted appearance, tying the person and the transformed scene together instead of leaving a very photographic face surrounded by historical clothing.
The comparisons below alternate between the original images and the filtered versions. What I like about them is how much the overall impression changes while the person remains recognizable. A different wardrobe and a different visual style, but still very much the face that came to the mirror.






I generated several body styles as well, although those didn't look quite how I wanted at first. Generating an asset quickly is handy; being able to adjust the result is just as important. In this case, the adjustment meant removing some vertices from the models.
Snapchat uses a custom 3D model format for these assets, so I quickly wrote a Python script to make those edits. A small bit of code to clean up the generated bodies and get them into a more useful shape for the filter. Apparently, even an AI-assisted wardrobe can need a little tailoring.
A beautiful filter only gets you so far if people don't know they're supposed to interact with it. I added a distance estimator and a call to action that invites visitors to approach the mirror: Come closer to become part of the Ancestry Gallery.
It's a small but important part of making the experience work in an exhibition. From farther away, the mirror gives you a reason to come over; up close, the portrait gives you something to play with. I randomize between styles, bodies and accessories, so the transformation has a little surprise built into it rather than giving everyone the same outfit.
This was a fun project to bring together: using an established face-filter system, creating an AI-assisted art workflow, writing a little model-processing code and giving it all a home in a custom app. The constraints shaped how I worked, but the goal stayed fairly simple: make visitors curious enough to step closer, and give them a portrait worth spending a moment with.
A little technical art, a little interaction design and quite a few hats. All to help someone find their place in the ancestry gallery - at least until the next outfit comes along.