Start your project

VL Studio / Work / Case study

One photo in. A 3D game hero out.

A personalized Christmas gift: the buyer uploads a photo, AI turns it into a rigged, animated 3D character, and that character becomes the star of a web game with six worlds. We built the product, the AI pipeline and the order system that runs it.

In-house product · not client work

Product
Personalized gift game
Plays on
Any phone or computer, no app
Game
Three.js · 6 worlds
Gift game hub screen: a 3D demo hero named Sofia stands in a snowy Christmas town, with Gift Week, Missions, Wardrobe and Power-ups buttons

The problem

A gift that is really about them

Personalized gifts are usually a name printed on a mug. We wanted something a person actually plays: a real video game where the hero looks like the person receiving it, whether that is a partner, a child, a family member or a friend. That meant three hard problems at once. The 3D character had to be made from one ordinary photo, without a 3D artist. The game had to run in any phone browser with a scanned QR code, with no app install. And every order had to move from payment to delivery without someone doing the same steps by hand each time.

What we built

A web game, an AI character pipeline and an order system

World picker listing six worlds: Snowy Town, Lapland Forest, Santa's Workshop, Frozen Ice Caves, Gingerbread Land and Santa's Village
Six worlds; some open on later days of the gift week
Close-up of the 3D demo hero snowboarding under the northern lights
Rigged, animated 3D hero
Hub screen with the demo hero in a snowy town
Personal hub with missions and wardrobe
Two gameplay frames side by side: the hero running through Santa's Village and snowboarding in Lapland Forest
The same hero in two worlds

From one photo to a game-ready 3D character

The AI part runs in two stages, with a person approving the result in between so paid 3D credits are never spent on a bad drawing.

  1. Turnaround sheetAn image model (Gemini, with OpenAI's image model as a fallback) draws the person as a character from four sides. Real customer photos only go to these first-party APIs.
  2. Human checkThe operator approves the sheet in a private admin panel, or asks for a new one.
  3. 3D modelThe four views go to Tripo's multiview-to-3D model, which builds the character.
  4. Rig and animateThe model is rigged as a biped and given six animation clips.
  5. Pack and gateA Node script merges everything into one GLB file. Automatic gates reject it unless every clip is present, it has at most 16k triangles and weighs at most 1.6 MB, so it loads fast on a phone.

The order pipeline

Every step after payment is automated or reduced to one button. The order state is saved on disk, so the system can stop at any point and pick up where it left off.

  1. Checkout webhookThe store sends a paid-order webhook. We verify its HMAC signature, and the intake link is derived from the order ID, so a repeated webhook cannot create a second order.
  2. Photo intakeThe buyer gets an email with a private upload page for photos, names and (on higher tiers) a short voice note. Consent is required, plus a guardian confirmation when the recipient is a child or teen.
  3. 3D generationThe two-stage hero pipeline above, with a credit cap per build and every paid step logged.
  4. Automated QAA scripted browser plays the whole game on a phone-sized screen, takes screenshots of each set piece and records console errors and failed requests. A spoken line with the recipient's name is checked by turning it into speech and back into text.
  5. Owner approvalNothing goes out until the operator approves the order in the admin panel. Publishing is blocked if the 3D hero, consent, photos or captions are missing.
  6. PublishThe game goes live at its private link, optionally locked with a countdown until the gift date.
  7. Email with QR cardsThe buyer gets the link plus a print-ready PDF on US Letter with crop marks: a 5×7 "Player 1 Ready" card, a tree hang-tag and an envelope insert, each with the 3D hero and a QR code.
Three printable gift cards with a 3D demo hero and QR codes: a tree hang-tag, a Player 1 Ready card and an envelope insert
The three printable designs that come with each game (demo hero)

Built to survive failures

How it is built

Three.jsJavaScript (about 9.6k lines)Python standard-library servicesGemini and OpenAI image modelsTripo multiview-to-3D, rigging, animationNode GLB packingPlaywright test runsBlender card rendersPillow, ReportLab, QR codesTransactional email API

No database: order state lives in files outside the web root, written atomically. That keeps a seasonal product cheap to run and easy to back up.

All heroes shown here (Sofia, Max) are demo characters made from AI-generated sample photos of people who do not exist. This is a new product, so we don't quote sales numbers.

We can build this for you

The same pieces work for other businesses: a branded web game with your customer as the hero, an AI step that turns uploads into 3D or images, and an order pipeline that runs itself from payment to delivery. Web apps start from $12,000 and branded mini-games from $8,000, with a fixed quote before we start.