DOF - dekay/vpinball-wiki GitHub Wiki

DOF - The Direct Output Framework

[!NOTE] This page is just getting off the ground

The DirectOutput Framework (DOF) is an add-in for Visual Pinball and other programs that provides software control over external feedback devices in a virtual pinball cabinet. The official DirectOutput Framework documentation is here for version R3 (beware links to the older R2 version) and the source code is here on Github. The official docs go deep into DOF's inner workings and it can be hard to glean from them what you as a user needs to know. That's what this page is for.

Supported Hardware and Their ini Files

DOF uses a lot of ini files. A lot. The DOF Config Tool (login required) takes care of generating these files, but it helps to understand a bit of what is going on "under the hood". Essentially, there is one ini file for each separate device that DOF knows how to handle. All of them have a similar name starting with directoutputconfig, followed by a number, and then ending with a .ini extension. Here is a list of all of the hardware that DOF is able to configure at time of writing (July 2025).

Name Ini Filename Comments
Artnet directoutputconfig100.ini ESP8266-based LED controller. Limited to 170 LEDs max so not very popular these days.
Dudes Cab directoutputconfig90.ini Arnoz Dude’s Cab cab controller
FRDM-KL25Z directoutputconfig8.ini KL25Z cab controller based on NXP dev board. Note: newer USB-C versions aren’t equipped with accelerometer. Superceded by the Pinscape Pico.
Ledwiz directoutputconfig.ini GroovyGameGear LED-Wiz LED and output controller. Append 1, 2, etc to the filename for additional units. Note: use WS2811 for Teensy & Wemos LED controllers.
PacDrive directoutputconfig19.ini Ultimarc PAC Drive LED and Output controller. Maximum one per cab
PacLed directoutputconfig20.ini Ultimark LED controller
Philips Hue directoutputconfig70.ini Control Philips Hue bulbs via the Hue bridge. More here.
Pincontrol1 directoutputconfig80.ini VPIN-shop PinControl 1 cab controller
Pincontrol2 directoutputconfig85.ini VPIN-shop PinControl 2 controller
PinOne directoutputconfig11.ini Cleveland Software Design’s PinOne Control Board
Pinscape directoutputconfig51.ini MJR’s Pinscape Gen 1 open source cab controller based on the NXP FRDM-KL25Z dev board. Pinscape Pico now recommended for new builds.
Pinscape Pico directoutputconfig120.ini MJR’s Pinscape Pico Gen 2 open source cab controller based on Raspberry-Pi Pico.
SainSmart directoutputconfig40.ini Sainsmart USB Relay board. For use with it & its clones. Other relay boards won’t work.
UltimateI/O directoutputconfig27.ini Ultimarc I-PAC Ultimate I/O Controller Board
WS2811 directoutputconfig30.ini For Teensy, Wemos D1 Mini, & Wemos S2 based LED Controllers available from various vendors and as DIY versions. Used for WS2812B strings and matrices in addition to WS2811. Probably the most popular LED Controller option these days as they are inexpensive and capable of driving thousands of LEDs.

The DOF Config Tool will only generate those ini files for the hardware that you specify in the Devices section of the Cabinet menu so most cabs will only have a few files from the list above generated by the DOF Config Tool. This screenshot shows a cabinet configured for three devices: a Pinscape Pico serving as a cab controller, a Wemos D1 Mini serving as a LED controller of type ws2811 from the table above, and a SainSmart relay board for controlling various toys. Selecting the "Generate Config" button on that screen will send a zip file to your PC that will have the corresponding directoutputconfig120.ini, directoutputconfig30.ini and directoutputconfig40.ini files respectively (amongst other files that we'll talk about later).

But what happens if you have multiples of a given Device? The DOF Config Tool has you covered. Note in the table above that there are gaps in the numbering between the different hardware devices. The DOF Config Tool will increment the base number for each additional board you have. For example, let's say you have a lot of LED's and have three Wemos D1 Mini's to control them. The Wemos is considered a ws2811 device as noted in the table above, so the filename corresponding to the first D1 will have the name directoutputconfig30.ini. The DOF config tool then increments filenames by 1, so directoutputconfig31.ini will represent the second D1 mini and directoutputconfig32.ini the third. Only the Ultimarc PAC Drive seems to be limited to one unit per cab.