~ / cmdr2

projects: freebird, easy diffusion

hacks: carbon editor, torchruntime, findstarlink

  • #freebird
  • #dom

The next major version of Freebird (i.e. v3) will use a new internal architecture that’s much easier to program with. In some ways, it’s an evolution of the architecture used in Freebird v2, but taken to its logical conclusion. The current version of Freebird (v2) uses a DOM-like model, and borrows a lot of programming patterns from browser-based programming. An underlying runtime abstracts away input events (like trigger_press, drag, enter, leave etc). It follows an event dispatch model (using add_event_listener and dispatch_event). Visual elements like menus, transform handles etc are DOM Nodes, which respond to events like drag and click. It also uses CSS-like styling to provide an easy way to style groups of related elements (like menu buttons).

  • #freebird
  • #vr
  • #api

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"]

  • #freebird

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.

  • #freebird
  • #puppetry

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.

  • #freebird

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.

  • #easydiffusion
  • #sdkit
  • #freebird
  • #worklog

Continued to test and fix issues in sdkit, after the change to support DirectML. The change is fairly intrusive, since it removes direct references to torch.cuda with a layer of abstraction. Fixed a few regressions, and it now passes all the regression tests for CPU and CUDA support (i.e. existing users). Will test for DirectML next, although it will fail (with out-of-memory) for anything but the simplest tests (since DirectML is quirky with memory allocation).

  • #vr
  • #ui
  • #freebird

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).

  • #freebird
  • #vr
  • #ar
  • #blender

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

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.

  • #freebird

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.