Inspiration

I play VRChat. Everyone there lives as their own avatar, the one that feels like them.

Sometimes friends I made in VRChat meet up in real life. We take photos together, but our real faces are in them, so nobody can post them online.

So here's what we actually do: everyone opens a picture of their avatar on their phone, we all hold our phones up together, and we take a photo of the phones. That's the group photo we post. It's funny, and also a little sad.

If the people in a photo could turn into their own avatars, everyone could post their photos freely. That's why I built KAWARIMI.

What it does

KAWARIMI turns the people in your photo into avatars. (Kawarimi is Japanese for the ninja trick of swapping yourself with a stand-in. Here, your avatar takes your place in the photo.)

Pick a photo, tap a person, choose an avatar. That's all. No cropping, no editing.

Avatar Pose mode lets you put your avatar into any photo, even one with nobody in it, like scenery, food or the places you went. Choose where the avatar should stand, sketch a stick figure to set the pose, and your avatar shows up right there in that pose, so you can share how that moment felt.

How we built it

Like most of you, I use AI as much as I can. I stand on the shoulders of giants and follow a spec-driven and test-driven approach.

Anything high-stakes goes to a specialist service. Login uses an auth provider, and payments use RevenueCat. Money is the one place you can't get wrong, and RevenueCat carried a lot of the weight: subscriptions and packs on both the App Store and the Web, with webhooks feeding a server-side credit ledger.

Every feature has clearly defined inputs and outputs, with boundary-value tests against them. That let me try spur-of-the-moment ideas quickly without breaking what already worked.

Stack: Expo / React Native (one codebase for iOS and the Web), Cloudflare Workers, Durable Objects, D1 and R2, RevenueCat, OneSignal, on-device person detection with ONNX Runtime, and three.js with three-vrm for VRM avatars.

Challenges we ran into

The biggest question was how to actually turn a person into an avatar.

I wanted to draw the avatar in the same pose as the person in the photo, with high quality, reliably, and at low cost.

At first I tried pose estimation: detect the skeleton, then fit the avatar model onto it. I tried YOLO, MediaPipe and others. With half-body shots, people wearing helmets, or divers in wetsuits, the results were really bad. It didn't generalize, so I dropped it.

In the end, I pass the original photo, a mask of the person, and a reference sheet of the avatar (front, side, back and close-up) to image models from OpenAI and Grok. It's a simple approach, but it was by far the most stable one.

One more honest challenge: VRChat avatars can be a little spicy (lol). Revealing outfits are common, and strict image models sometimes refuse avatars that aren't explicit at all. I use Grok as a fallback when the primary model declines. How to serve these users well while staying within each provider's content policy and our own terms is still an open question for me.

Accomplishments that we're proud of

I timed the launch on purpose. I released the web version during Vket Real, a real-world event for VRChat users in Japan. The launch post took off on X and passed 500,000 impressions, and lots of people started using it right away: https://x.com/eightbeat8b/status/2080969575609618553

But one kind of post kept showing up: "There are no photos of me on my phone, so I can't transform anything." It turned out that VRChat players' camera rolls are full of food, ramen and scenery. Photos with themselves in them were almost nowhere to be found. I was sure the killer feature was turning people into avatars, so my core concept almost collapsed.

Around the same time, a local VTuber who promotes their hometown asked to have their avatar appear in the photos they take around town. That gave me the answer: I added Avatar Pose mode, so you can put your avatar into any photo, in any pose you want.

What we learned

I launched the web version before payments were ready, as a free "festival": 3,000 free transformations for everyone until the paid plans were done. It went far more viral than I expected. The 3,000 were gone almost right away, so I added 2,000 more, 5,000 in total. About 1,600 people created an account in the first two weeks.

There was no paid plan yet. Two weeks later I launched one, and exactly three people paid.

Image generation is expensive. I lost a lot of money, and hardly anyone paid. I cried.

So I studied funnels seriously and looked at where people dropped off before paying. The answer was how easy it is to log in and to pay. Going native with Sign in with Apple and App Store purchases through RevenueCat fixes exactly that, so I'm confident this release will bring many more paying users. (Please subscribe!)

What's next for KAWARIMI

Inspiration

I play VRChat. Everyone there lives as their own avatar, the one that feels like them.

Sometimes friends I made in VRChat meet up in real life. We take photos together, but our real faces are in them, so nobody can post them online.

So here's what we actually do: everyone opens a picture of their avatar on their phone, we all hold our phones up together, and we take a photo of the phones. That's the group photo we post. It's funny, and also a little sad.

If the people in a photo could turn into their own avatars, everyone could post their photos freely. That's why I built KAWARIMI.

What it does

KAWARIMI turns the people in your photo into avatars. (Kawarimi is Japanese for the ninja trick of swapping yourself with a stand-in. Here, your avatar takes your place in the photo.)

Pick a photo, tap a person, choose an avatar. That's all. No cropping, no editing.

Avatar Pose mode lets you put your avatar into any photo, even one with nobody in it, like scenery, food or the places you went. Choose where the avatar should stand, sketch a stick figure to set the pose, and your avatar shows up right there in that pose, so you can share how that moment felt.

How we built it

Like most of you, I use AI as much as I can. I stand on the shoulders of giants and follow a spec-driven and test-driven approach.

Anything high-stakes goes to a specialist service. Login uses an auth provider, and payments use RevenueCat. Money is the one place you can't get wrong, and RevenueCat carried a lot of the weight: subscriptions and packs on both the App Store and the Web, with webhooks feeding a server-side credit ledger.

Every feature has clearly defined inputs and outputs, with boundary-value tests against them. That let me try spur-of-the-moment ideas quickly without breaking what already worked.

Stack: Expo / React Native (one codebase for iOS and the Web), Cloudflare Workers, Durable Objects, D1 and R2, RevenueCat, OneSignal, on-device person detection with ONNX Runtime, and three.js with three-vrm for VRM avatars.

Challenges we ran into

The biggest question was how to actually turn a person into an avatar.

I wanted to draw the avatar in the same pose as the person in the photo, with high quality, reliably, and at low cost.

At first I tried pose estimation: detect the skeleton, then fit the avatar model onto it. I tried YOLO, MediaPipe and others. With half-body shots, people wearing helmets, or divers in wetsuits, the results were really bad. It didn't generalize, so I dropped it.

In the end, I pass the original photo, a mask of the person, and a reference sheet of the avatar (front, side, back and close-up) to image models from OpenAI and Grok. It's a simple approach, but it was by far the most stable one.

One more honest challenge: VRChat avatars can be a little spicy (lol). Revealing outfits are common, and strict image models sometimes refuse avatars that aren't explicit at all. I use Grok as a fallback when the primary model declines. How to serve these users well while staying within each provider's content policy and our own terms is still an open question for me.

Accomplishments that we're proud of

I timed the launch on purpose. I released the web version during Vket Real, a real-world event for VRChat users in Japan. The launch post took off on X and passed 500,000 impressions, and lots of people started using it right away: https://x.com/eightbeat8b/status/2080969575609618553

But one kind of post kept showing up: "There are no photos of me on my phone, so I can't transform anything." It turned out that VRChat players' camera rolls are full of food, ramen and scenery. Photos with themselves in them were almost nowhere to be found. I was sure the killer feature was turning people into avatars, so my core concept almost collapsed.

Around the same time, a local VTuber who promotes their hometown asked to have their avatar appear in the photos they take around town. That gave me the answer: I added Avatar Pose mode, so you can put your avatar into any photo, in any pose you want.

What we learned

I launched the web version before payments were ready, as a free "festival": 3,000 free transformations for everyone until the paid plans were done. It went far more viral than I expected. The 3,000 were gone almost right away, so I added 2,000 more, 5,000 in total. About 1,600 people created an account in the first two weeks.

There was no paid plan yet. Two weeks later I launched one, and exactly three people paid.

Image generation is expensive. I lost a lot of money, and hardly anyone paid. I cried.

So I studied funnels seriously and looked at where people dropped off before paying. The answer was how easy it is to log in and to pay. Going native with Sign in with Apple and App Store purchases through RevenueCat fixes exactly that, so I'm confident this release will bring many more paying users. (Please subscribe!)

What's next for KAWARIMI

My biggest challenge now is retention. About 1,800 people signed up on the web, but only around 10 stayed and became paying users. Most people came for a viral moment, and for them KAWARIMI was a special event, not something they use every day.

So I'm working on two things.

1. Friends. I'm adding friends, so you can use your friends' avatars to transform them in your photos. At a meetup, everyone can become their own avatar in the same photo, without sending avatar pictures back and forth.

2. Reminders with OneSignal. On weekend evenings, a short nudge that makes you picture it, like turning tonight's dinner photo into a fun post with your avatar. The goal is to make KAWARIMI part of everyday life, not a one-time trick.

Built With

Share this project:

Updates

Submission history