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.
ini
Files
Supported Hardware and Their 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.