A 10 minute read.
In my last post I went through my VTubing
setup on Windows and all the “generations” of setup that I’ve done over the last
year. Thanks to the meddling of a certain nerd who is in the chat watching me
write this, I have figured out a way to run this setup on Linux. The ultimate
goal for this phase is to get all this running on my work laptop so I can use it
for a webcam. However this post is just going to cover the Linux setup bits.
Differences Between OSes
On Windows, this setup is really straightforward. VSeeFace provides a webcam
driver that makes the output of the
VSeeFace app pretend to be a USB webcam. Google Meets, OBS and the like can then
pick that up like it was a normal webcam. The overall flow looks like this:
This doesn’t work at all on Linux though. There’s no real way to get VSeeFace (a
windows application that runs under Unity) to directly pretend to be a webcam at
this moment.

<Mara> Pedantically, you can probably get away with doing this using a combination of
PipeWire, Video4Linux or some other incarnation like that, but the main point
here is that VSeeFace is a Windows app and I don’t think it’s possible to make
Linux-specific calls like that. Feel free to prove me
wrong.
So, instead we need to have VSeeFace directly output to OBS. This makes the flow
look something like this:
The main difference is that for some reason VSeeFace on Linux can’t capture the
webcam directly. This isn’t an issue however because
OpenSeeFace can capture the webcam
and then send the face capture data directly to VSeeFace instead. Then OBS can
grab VSeeFace via XComposite like normal.

<Mara> There may be a way to do this in Wayland, however we haven’t figured that out
yet. Please let me know if you figure out a way to get this working in
Wayland.
One of the major usability differences here is that OpenSeeFace has support for
tracking blinking. However, at the same time my avatar opens its eyes really
slowly when I do blink. There’s probably a slider I need to set to make this
less…horrible, but overall it does work! I don’t get this on Windows, that’s
interesting.

<Numa> Kieto, his eyes closed!
Failed Attempts
One of the biggest stumbling points was the fact that VSeeFace is distributed as
a 64 bit application. Somehow my naive usage of Wine in its default config
caused me to create a 32 bit Wine prefix (it was then I learned that there are
such things as 32 and 64 bit prefixes and how they are mutually incompatible),
which made it impossible to launch VSeeFace because Wine would reject it for
being a 64 bit program.
I went through several rounds of nuking ~/.wine
, trying to run it again,
setting various weird environment variables, setting build overrides, it was a
catastrophe.
Other people have reported that you need to use
Lutris to install and use VSeeFace on Linux.
This did not work. This did not work at all. Trying to do it this way on a NixOS
machine was an absolute waste of my time and was demoralizing and frustrating.

<Cadey> I think it has to do with the fact that Lutris really really really really
wants to have its own special snowflake vendored copies of Wine/Proton and it
will fight you if you try to have your way otherwise.
Then I realized