Skip to content

Blog

Post from Oct 03, 2025

Freebird v2.2.2 released. It now exposes the states/values of the VR buttons (as custom properties) in FB-Controller-Right and FB-Controller-Left (see: XR Tracking Objects).

These values will be updated every frame, when VR is running.

You can use these properties to drive shapekeys, or use them in other scripts: * To drive a shapekey, please right-click a property, e.g. 'trigger', and click Copy as New Driver. Then right-click on your shapekey value, and select Paste Driver. * To use in a script, use the custom property directly. E.g. bpy.data.objects["FB-Controller-Right"]["trigger"]

... continue reading

Post from Sep 29, 2025

Freebird v2.2.0 released - Freebird now exposes the VR headset and controller positions via three empty objects in the scene: FB-Headset, FB-Controller-Right, and FB-Controller-Left.

These three empties live-track the position of the headset and the VR controllers. For e.g. you can attach objects to these empties to animate objects or bones.

... continue reading

Post from Sep 01, 2025

Puppetry v1.2.19 released! It allows you to move the overall armature rig via an external animation, while still controlling the head and hands with the VR controllers. Previously, the head and hands would stay at a fixed place in the world, and not move along with the rig.

For e.g. this is useful if you want to move the character down a corridor (using a script or animation timeline), while using Puppetry's motion capture to animate the head and hands.

Puppetry v1.2.19 also adds sensible offset defaults if Rigify bones are attached, specifically the head, hand_ik.R and hand_ik.L bones. This will help animate these bones in a more comfortable orientation.

... continue reading

Updates from June 2025

Note: Freebird is free for students! If you're a student at a school or college, please feel free to email or message me for a free copy!

June 2025 marked a restart of the Freebird project, after a few months of maintenance-only fixes.

Reliability

My focus in June was on improving Freebird's reliability. A number of long-standing critical bugs have been fixed, broken features have been repaired, and missing documentation has been updated. Basically, anything that crashed Freebird (or was urgently broken) was considered as an immediate priority.

I'm still investigating a Blender crash (that happens occasionally). So please save your work frequently.

I'm sure Freebird still has undetected bugs, so please let me know on #support if Freebird crashes for you. But a number of those crashes were fixed in June, and a focused effort has been made to improve the reliability.

Features

In terms of features, Free Extrude is back, and the transform gizmos now support moving/rotating/resize along specific planes. The transform gizmos now also support mode-specific transforms, i.e. the ability to move without rotating/resizing, rotate without moving/resizing, or resize without moving/rotating.

Tools to help improve reliability

To help investigate difficult-to-recreate bugs, I added an event record/replay developer tool in Freebird. If Freebird crashes at any point while running (on my PC), I can replay those exact button presses and movements any number of times, and check Freebird's code while running it. I've fixed a few difficult-to-recreate bugs using this tool. Note: This tool is disabled by default for users, so Freebird isn't recording your actions.

Another improvement was to run Freebird's automated tests in a random order, using pytest-random-order. Freebird already runs over 600 automated tests (which check various aspects of Freebird before a new version is released). But those tests used to run in a fixed order previously. Since I can't predict the order in which a user will use Freebird's tools, I'm now running the tests in a random order. This helps ensure that Freebird is reliable regardless of the order in which you use the various tools. This change has already revealed a couple of hidden bugs (that have been fixed).

Community

The Discord community has grown to nearly 1200 members, and it is active at trying out new Early-Access features and providing valuable feedback!

Some user experiments using Freebird:

Did I miss any? Please send me your cool "made with Freebird" videos!

Next

Lots more to come. The focus, as always, remains on making VR a part of your daily design workflow.

Thanks!

... continue reading

Post from Jan 02, 2025

Really need to figure out a way to render standard HTML elements (styled with CSS and modified with JS) in a 3D scene. Reinventing excellent libraries like PrimeVue again inside 3D (for rendering in VR) is just wasteful.

There have been attempts, e.g. A-Frame, but we really need to view the webpage in 3D. Just regular HTML elements. The regular DOM renderer. The pieces feel like they're there conceptually, but the implementation gap is probably big enough (that it hasn't happened yet).

For e.g. Freebird (Blender VR plugin) had to reinvent everything from scratch - UI buttons were rectangles drawn using shaders, grid layouts had to be reimplemented from scratch. I abstracted it into a sensible framework (heavily mimicking HTML/CSS/JS, because it makes sense!). But obviously this is all very wasteful, and results in poor quality UIs, because building a UI framework isn't the primary focus of Freebird (it's 3D modeling in VR).

... continue reading

Post from Dec 12, 2024

Freebird is finally out on sale - https://freebirdxr.com/buy

It's still called an Early Access version, since it needs more work to feel like a cohesive product. It's already got quite a lot of features, and it's definitely useful. But I think it's still missing a few key features, and needs an overall "fine-tuning" of the user experience and interface.

So yeah, lots more to do. But it feels good to get something out on sale after nearly 4 years of development. Freebird has already spent 2 years in free public beta, so quite a number of people have already used it.

Freebird sold its first few copies since it went on sale last night. The main emotion is a sense of relief I think.

... continue reading

Post from Oct 30, 2024

tl;dr - Today I shipped the ability to see the desktop screen in VR (while using Freebird). And fixed a few user-reported bugs in Freebird.

Performance

The performance is still a bit laggy. The actual screencapture code now runs in a separate process, and copies data over a SharedMemory buffer (which works pretty well for sharing data between two separate processes). That helps avoid Python's GIL while performing numpy operations on large arrays.

But the main performance bottleneck is the inability to update an existing texture using Blender's gpu module. The current implementation in Blender forces me to create a new texture each frame, which is pretty slow. And this has to be done on the main thread, otherwise Blender crashes with a null context error.

So I update the screen just two times per second. For now, the usability is adequate IMO. But if it becomes important, I can maybe look at the Blender codebase and see if there's anything that can be proposed as a solution. Like right now, doing video is impossible at decent framerates using the gpu module. Maybe I missed something, but I really searched a lot (and tried a lot of approaches).

Illusion of responsiveness

To create an illusion of responsiveness, the mouse cursor is updated every frame (72fps), while the actual screen updates twice per second (2fps).

Custom code to avoid dependencies

And thanks to ChatGPT/Claude, I got a custom Windows-only implementation for taking screenshots and getting the mouse cursor location. It's a bit faster than mss/pyautogui and works fine for my purpose.

The main reason was to avoid depending on external libraries (tricky to install them, being a blender addon). With AI codegen tools, it might actually be a good tradeoff, since the generated code is reasonably straightforward and maintainable (and uses well-supported Windows APIs). And I didn't spend much time on them.

Let's see how it performs during actual usage. It's now in early-access on Freebird. Hopefully it won't crash!

... continue reading

Post from Oct 23, 2024

Built an initial prototype of showing the desktop window screencapture inside VR (while in Freebird), using the mss library. Freebird will have to install it using subprocess.run([sys.executable, '-m', 'pip', 'install', 'mss']).

It works, but is currently a bit laggy. The capture and processing happens on a thread, and a timer modal calls the actual GPU texture assignment. The GPU texture assignment takes about 2 ms, but the XR view is still juddering (way more than it would with an extra 2ms of latency). Still need to investigate and smoothen the performance.

But it seems to work well overall. I even drew a tiny placeholder cursor, and it casts the entire screen, so it's possible to switch to other programs while in VR in Freebird. Promising.

... continue reading

Post from Aug 28, 2024

Wrote a WebXR drawing tool with passthrough (i.e. AR overlay), in order to draw lines over real-world surfaces. It's pretty handy!

Uploaded it as Freebird Lite. It proved itself useful yesterday, since I could sketch lines around the house to plan different fittings and show the ideas to others (using the headset). Since it's just a website in a browser, it doesn't require any installation. And it works on all the compatible 6 DoF headsets.

For now, it will only let you draw lines in the air. That was all I needed yesterday.

The main limitation right now is that it doesn't "anchor" things correctly, i.e. it resets the orientation when the headset recenters (e.g. after Quest wakes up from sleep). So the lines will no longer be where you drew them (relative to the real-world surfaces). I'm already using anchored elements, but clearly I'm doing it wrong.

Dev note - I created a self-signed certificate for my PC, so I can access it (over LAN) from the Quest. Debugging over temporary Cloudflare tunnels was pretty inconvenient.

... continue reading

One month since v2 was launched: what is new and what's next?

It's been slightly over a month since Freebird's v2 was launched, so let's recap what's happened since then, and look at what's coming up next!

Community

Our Discord community has grown to over 600 members, and it is very active at trying out new Early-Access features and providing very valuable feedback! This is crucial to Freebird's ability to build what really matters to users.

There's also been more buzz about Freebird on social media, resulting in some cool experimentation by users!

Some user experiments using Freebird:

Did I miss any? Please send me your cool "made with Freebird" videos!

New features

Here are some of the new features built after v2's launch:

A more detailed list of changes can be found in the changelog.

While some of these features were planned beforehand, most of these were built in response to user feedback. So if you'd really like something built (that helps you today), please let me know!

Upcoming features

While nothing is ever promised (especially since priorities can change based on user feedback), here are some of the important new features coming very soon:

  • Simple animation timeline and controls in VR
  • Transform gizmo, for precise control
  • Knife tool
  • Pick material and color
  • Improved extrude tool
  • Plugin API, to allow users to extend Freebird's VR functionality with custom Python scripts
  • UI for managing annotation layers in VR
  • And lots of UI tweaks and adjustments, including potentially moving the grab functionality to the trigger button (instead of squeeze)

So yeah, lots more to come. The focus, as always, remains on making VR a part of the daily design workflow. So will continue figuring out what's preventing people from using it regularly, and bridging that gap.

Thanks!

... continue reading