Welcome to johnbintz.com

Persistent VLC connection to OBS via JACK and Pipewire in Linux

Jul 12, 2022

I want to use VLC to play music into a separate audio channel for my The Industrious Rabbit streams. I wanted to use JACK as I’m running Pipewire. Here’s how I set it up:

  • Create a new JACK audio source in OBS for 2 channels.
  • Don’t enable JACK output in VLC. I use KDE, so if I keep it on Automatic, I believe it uses PulseAudio, which is what you want as it keeps the name of the JACK VLC instance the same between VLC executions.
  • Get QJackCtl running and open Graph. You should see the OBS JACK input.
  • Start a file playing in VLC. You should see VLC in the Graph.
  • Open Patchbay. Patchbay has always confused me until now.
  • Add an Output Socket/Plug:
    • For VLC
    • For the first two output channels
  • Add an Input Socket/Plug:
    • For the OBS JACK audio source
    • For the two channels
  • Drag from the VLC output to the JACK input. A green line will connect the two.
  • Save the Patchbay definition! This is the step I never realized I had to do. You can’t do the auto patching until it’s saved. I saved it to my home directory.
  • The Activate button will no longer be disabled. Click it.
  • Now, as long as it’s active in the QJackCtl patchbay, VLC will always be connected to OBS, and the connection will be restored if one or both go away and come back.
  • When you restart QJackCtl, that patchbay option should be there again.

One gotcha is that the volume of VLC will keep resetting to 100% with each track change. You’ll have to adjust the volume in OBS accordingly, or run it through some other JACK filter.

Today I Learned 2022-07-09

Jul 09, 2022

Setting up WireGuard within a network in a Docker container

WireGuard is an alternative VPN to something like OpenVPN. It has a few orders of magnitude fewer lines of code, and seems really fast in the small amount of time I’ve used it.

I used a few guides to configure it, with this guide being the main one, along with the LinuxServer.io image documentation.

The gotchas I ran into that you might run into as well:

  • INTERNAL_SUBNET should not be the subnet of the main network you use! So if your main network is, don’t use that as the INTERNAL_SUBNET.
  • I run Pi-Hole on the same server as the WireGuard VPN container, and my router is configured to hand out that address to DHCP clients. The router also does DNS, as it’s a fallback if the server where Pi-Hole is running is down. I had to provide additional dns configuration to the Docker container, listing off first the router, then localhost, and then providing the internal IP address of the Pi-Hole server, where the internal server names are defined, as PEERDNS.
    • If you start seeing entries in the WireGuard logs about [FATAL] plugin/loop, you know you need to futz with the container’s dns settings.

Other than these issues, it was super easy to set up and use.

Today I Learned 2022-07-01

Jul 01, 2022

Alternative video hosting platforms

  • PeerTube, like Mastodon for videos
  • MediaGoblin, can host a little bit of everything and seems to have come back to life as a project


  • Multiple root nodes can be simulated with floating nodes: double [Ctrl]-click on the document to add one.
    • This node is still attached to the root node. Create a child node, then Format -> Edge Properties -> Styles -> Bezier on that child node to get visible connections between child nodes in the floating node back.
    • cats

Too many open files on Ubuntu

May 2020 to May 2021 Art Progress

May 17, 2021
Showing my art progress over a year

Top is from an unpublished The Industrious Rabbit comic. Bottom is from The NES: Playing Volleyball with Three of Your Friends.

2020 was the first time in a very long time I’d put serious study into my art since college. I have three main resources I used during that pandemic time:

Hopefully once May 2022 rolls around I’ll be even better and faster.

Krita 4.4.3 on Android works!

Mar 31, 2021

Krita 4.4.3 was released recently, and the Android version fixed the biggest show-stopper for me to be able to use it: customizations to the app configuration are now restored on startup, so you can rearrange and modify settings and they are preserved between app uses.

This means I was able to set up Krita so I could minimize the time needed to go into the main menu, and not need to use my Samsung Galaxy Tab S7+’s keyboard, while supporting a workflow similar to the one I came up with for Clip Studio Paint:

Krita 4.4.3 on Android
  • The addition of Clear and Deselect to the top bar lets me use Lasso Select for manipulation and erasing much faster.
  • Adding Show Dockers lets me hide most of the UI without having to go into full-blown Full Screen mode.
  • I added Mirror View to the toolbar as well so I can quickly flip the canvas to check my drawings for errors.
  • I moved Tool Options to the navigation and out of a docker since I don’t use it too often. Mainly for Reference Art.
  • I moved the Toolbox docker to the top of the screen so all the tools are laid out in a row. Having them in the side docker meant I had to scroll up and down a bunch in the docker to find things.
  • Everything else on the screen covers my usual CSP workflow.

There are a few things that are missing

  • I want to be able to lock transforms to aspect ratio as a tool option to Transform. Without a keyboard, it’s not locked at all so you have to be precise when manipulating selections.
  • There’s no right-click support on the canvas at all, even with a keyboard or with a Bluetooth mouse, so vector operations are more difficult. I went back to drawing balloons by hand like I did in the Autodesk Sketchbook days of The Industrious Rabbit.
    • More robust balloon handling in general would be great. I don’t care as much abuot text handling on Android since dealing with fonts is a total mess.
  • I don’t seem to be able to save tags on brushes to be able to group them. I’ll have to experiment with this more.

I plan on doing all the art for the next The Industrious Rabbit post in Krita to give it a real good workout. So far, so good!