Today we're making a move we've wanted to make for a long time: the core PrivacyPuppet 3D avatar viewer is now fully open source under the MIT license. The repository is live at github.com/privacypuppet/privacypuppet.
Privacy tools should be transparent. You shouldn't have to trust a black box with your identity — you should be able to read every line of code that runs in your browser. Open-sourcing the viewer is our way of putting that principle into practice.
What's in the Repo
The repository contains the complete, production-ready 3D avatar viewer — the same code that powers privacypuppet.com. It's built with a modern stack:
- Next.js 16 with static export — no server required
- React Three Fiber and Three.js for GPU-accelerated 3D rendering
- TypeScript throughout for type safety
- Tailwind CSS 4 for styling
The release ships with three open-source avatar models — Kofi, Yuki, and Liam — built with MakeHuman and MPFB2 (the MakeHuman Plugin for Blender 2). It also includes four photorealistic backgrounds: city night, office, lounge, and nebula.
What Makes the Viewer Special
This isn't a static 3D model display. The viewer brings avatars to life with a suite of real-time animation features:
- Mouse/touch head tracking — the avatar follows your cursor or finger in real time
- Jaw animation — toggle mouth movement with the
Mkey - Procedural eye movement — organic saccades and natural blinking patterns
- Idle breathing and sway — subtle chest and body motion for a lifelike resting state
- Immersive mode — press
Ito hide all UI and fill the viewport
Two Animation Systems, One Codebase
Under the hood, the viewer supports two distinct animation architectures:
- Morph-target (blendshape) animation — the system used by commercial platforms like Avaturn, where facial expressions are driven by mesh deformations
- Bone-based quaternion animation — the system used by MakeHuman/MPFB2 models, where a skeletal rig drives head rotation, jaw open/close, and eye gaze
Both systems coexist in the codebase. If you have your own Avaturn-compatible .glb model with ARKit blendshapes, it will work automatically — just drop it in and configure the model entry.
What Was Excluded (and Why)
The original three avatars — Steve, Emma, and Marcus — were built using Avaturn, a commercial avatar platform. Their model files are copyrighted and cannot be redistributed. All .glb files and references to those models were removed from the open-source release.
The blog, disclaimer, and other site-specific content were also excluded. This release is focused purely on the core viewer application.
Add Your Own Models
One of the goals of open-sourcing was to make it dead simple to add your own avatars. The process is straightforward:
- Create or customize a head/bust model in MakeHuman
- Export it through Blender as a
.glbfile - Drop the file into the
public/mpfb_models/directory - Add one entry to the
MODELSarray inpage.tsx
That's it. The viewer handles the rest — rigging, animation, lighting, and background compositing all work automatically.
Why Open Source, Why Now
Privacy tools live and die by trust. When a tool claims to protect your identity, the only real proof is showing your work. By releasing the source, we're inviting the community to audit the code, verify that nothing phones home, and confirm that everything runs entirely client-side — no servers, no tracking, no data collection.
We also want to see what the community builds. The viewer is a solid foundation for any project that needs a real-time 3D avatar — privacy tools, virtual assistants, games, art installations, accessibility aids. The MIT license means you can use it for anything.
Privacy isn't just a feature — it's an architecture decision. Open source is how you prove it.
Get Involved
The repo is live and ready for contributions. Whether you want to add new models, improve the animation system, optimize performance, or just poke around the code — we'd love to have you.
- Star the repo to show support and help others discover it
- Fork it to start building your own avatar experience
- Open an issue if you find a bug or have a feature idea
- Submit a PR — contributions of all sizes are welcome
Check it out: github.com/privacypuppet/privacypuppet