Table of Contents
- THIS IS NOT THE FAQ PAGE
- General tips
- Input tabs (Buttons, Analogs)
- Overlay tab
- Main Menu (Escape)
- Screenshot (Print Screen)
- Subscreen overlay (Page Up)
- I/O window (F2)
- Config overlay (F3)
- Virutal keypad (F5, F6)
- Card Manager (F7)
- Control (F9)
- Patch Manager (F10)
- Screen Resize (F11)
- Overlay Toggle / FPS display (F12)
- VR Control (no default shortcut)
- Camera Control (no default shortcut)
- Hotkeys
- Patches tab
- Cards tab
- card0.txt / card1.txt
- Card number generation
- USB drives as cards
- Overriding cards as command line parameters
- NFC card readers
- Options tab / Advanced options tab
- Graphics
- Windowed mode adjustments
- Image resize
- DirectX 9on12
- Force Refresh Rate
- Only Use One Display
- Auto-rotate Display
- Disable D3D9 device hooks
- NVIDIA profile optimization
- Audio
- SpiceCompanion and API
- Performance
- Others
- Misc. information
THIS IS NOT THE FAQ PAGE
Important
Read the Known Issues | FAQ page for troubleshooting crashes, problems, and error messages.
This page documents various features of spice2x, including new functionality added in spice2x and what was in original branch of spicetools.
General tips
- ctrl + click various input widgets (like sliders) and you'll be able to enter values using your keyboard.
Input tabs (Buttons, Analogs)
Buttons
- Press
Bind, and press a button on your controller to bind keys.- This method uses the Windows raw input API, which can detect any HID device (mouse, keyboard, joystick, MIDI) and more responsive.
- Press
Naive(instead of Bind) for device-independent keyboard binding.- This method uses GetAsyncKeyState API, which only works for keyboards and slightly less responsive in theory, but probably not enough for you to notice.
- Depending on your keyboard, this method may be better (or worse) if you have issues with NKRO.
- Additionally, if you have software simulating keyboard strokes (e.g., AutoHotKey, SliderShim, joy2key, etc) then Naive will pick it up, while Bind will not. Just make sure that the software generating the simulated keystrokes is running as administrator, as Spice always run as admin, and it's required to be at the same privilege level.
- You can bind multiple buttons for the same input. At the bottom of the UI, there is page navigation (Page 0), you just move to a different page and bind more controls.
- Check
Bind Manyat the bottom of this page to bind multiple things in a row, instead of click on Bind over and over. - Press Edit after binding a button for more options, such as inverting the button press to a release, MIDI sensitivity, etc.
Buttons-as-analog
If you're NOT using a proper controller, but instead using a keyboard (or controller with only buttons), Spice can translate digital input to analog for some games. For example, turntables in IIDX, spinners in Museca, knobs in SDVX, and so on.
Additionally,
- In IIDX, there is
TT+/- Alternatewhich can be used as an alternative scratch button, which makes IIDX play more like BMS on keyboard ("double shift scratching") - You can use
IIDX Digital TT Sensitivity (-iidxdigitalsens)to adjust how much the turntable moves for each button press. - In SDVX, similarly, there is
SDVX Digital Knob Sensitivity (-sdvxdigitalknobsens)to adjust how much the knob turns for each button press.
Keypad buttons
By default, they are bound to the numpad. You can rebind them to top row number keys if you wish.
Note that IIDX in TDJ mode is an exception and does not accept any keypad input, and requires you to use the touch screen (or subscreen overlay in spice, using your mouse). Insert Card will still work though. Alternatively, you can use IIDX TDJ Subscreen Keypad Touch Emulation (-iidxsubpoke) option to emulate touches on the subscreen when keypad button is pressed. This requires Unscramble Touch Screen Keypad in TDJ patch to be applied for obvious reasons.
Analog
Analog input is bound here, such as knobs, turntables, sliders, etc.
- It is indeed possible to adjust the sensitivity of analog HID devices by applying a multiplier. The multiplier is a squared value of the displayed number (e.g., setting sensitivity to 2.0 means 4x the speed compared to normal).
- However, a hardware solution (adjusting the sensitivity in your controller) is better than this software-based solution. Therefore, it is recommended that you use 1.0x, unless you have a strong need to adjust the sensitivity.
- Spice cannot compensate for deadzones in the hardware, no matter how hard you try.
- Smooth Axis option applies a smoothing algorithm (in software of course) to the analog input. It only really works for rotational movement, such as turntable or knobs. It removes jitter from bad analog sensors, but it also adds a tiny bit of latency (due to how averaging filter algorithm works).
Overlay tab
Default key bindings are shown inside parentheses below, but you can rebind them in the Overlay tab.
Main Menu (Escape)
Shows the primary menu, which shows a list of other overlay windows that you can open.
Screenshot (Print Screen)
Takes a screenshot. By default, files are saved to Screenshots folder next to Spice. You can change the path using Screenshot Folder Path (-screenshotpath).
Overlay is also captured in the image.
Subscreen overlay (Page Up)
Some games use multiple monitors. Instead of requiring multiple monitors, Spice can show you the subscreen in a overlay window on your primary monitor. For subscreens that require touch screens, Spice can also emulate touch input by taking in your mouse input (i.e., you can just click on the subscreen overlay instead of having to purchase a separate touch screen monitor)
Depending on the game, you can adjust subscreen window settings in the Options tab, under Overlay, such as automatically showing the window on launch, resizing or moving the window, setting the font size for IIDX ticker, and so on.
The following games have subscreen overlays with touch:
- IIDX TDJ - shows the secondary touch screen seen on LM cabs.
- SDVX VM - shows the secondary touch screen seen on VM cabs.
The following game also has a subscreen overlay (not interactive):
- IIDX LDJ - shows the LED segmented display (aka the LED ticker).
- DANCERUSH - shows dance floor LED pattern.
I/O window (F2)
Press F2 to show the I/O window, which will show you a series of widgets found on the cab. All games will have the test and service buttons, some games will have more; e.g., arrow menu buttons for DDR/Gitadora, VEFX buttons and sliders for IIDX, and so on.
Config overlay (F3)
Bring up the config window in the game, similar to what is shown in spicecfg.exe, except usable while the game is running.
Virutal keypad (F5, F6)
Show a virtual keypad (PIN pad) for P1 or P2. You can also insert the default card.
Card Manager (F7)
You can browse a list of cards and insert them as needed. To configure the list of cards, edit %appdata%\spicetools_card_manager.json on disk.
Control (F9)
Shows a set of tools for displaying various I/O states, AVS information, CPU/GPU status, and so on.
Patch Manager (F10)
See Patches section below.
Screen Resize (F11)
See Image Resize section below.
Overlay Toggle / FPS display (F12)
Toggles all of Spice Overlay on/off. You can also see the FPS counter widget, which contains the current FPS, time, and uptime (session timer).
VR Control (no default shortcut)
Removed in spice2x.
Camera Control (no default shortcut)
This is for TDJ camera hook in IIDX. Adjust various knobs for your webcam (brightness, focus, exposure, pan/tilt, etc). See this page for more details.
Hotkeys
By default, overlay keys will just work (e.g., if you bound F7 to Toggle Card Manager, a single press of F7 will show you the Card Manager window).
If you bind a key to Hotkey Enable 1, it will be required to be pressed in addition to the overlay key (e.g., if you bound Control to Hotkey Enable 1, you will now have to press CTRL+F7 instead of just F7)
If you bind a key to Hotkey Enable 2, now you have to press three buttons (e.g., if you bound Shift to Hotkey Enable 2 in addition to above, now you have to press CTRL+SHIFT+F7).
Lastly, if you bind a key to Hotkey Toggle - then you can use it to switch between activating the overlay bindings or completely disabling them (e.g., if you bound Caps Lock to Hotkey Toggle, when Caps Lock is on, F7 works, and when Caps Lock is off, F7 doesn't work).
This can be used for:
- preventing accidental presses of overlay buttons
- using buttons on a controller as overlay keys (e.g., START+SELECT+1 to take a screenshot)
Patches tab
See this page.
Cards tab
card0.txt / card1.txt
You can place card0.txt (P1) or card1.txt (P2) next to spice executables to use as cards. The text files should contain the E004 card number. They will be used when you press the Insert Card button.
It is also possible to change the directory in which the text files are read from using the Cards tab.
Card number generation
Press Generate button and a new card number will be issued to you, and then saved as card0.txt / card1.txt.
USB drives as cards
If you plug in a storage device (such as a thumb drive), spice will read the root and look for card0.txt and card1.txt. If present, they will be treated as if you just inserted a card.
Overriding cards as command line parameters
You can also use Player 1 Card (-card0) or Player 2 Card (-card1) options to set the card number.
NFC card readers
Warning
ACR112U card readers are no longer recommended to purchase. Official product was discontinued years ago, and many cheap Chinese clones on Amazon and Alibaba are unable to properly read FeliCa cards. See Known Issues page for more details.
Check the Advanced options tab for ICCA reader (NFC readers used on real cabinets connected over serial), CardIO (community HID standard), and HID Smartcard reader (ACR122U chipset only). There is support for BemaniTools5 API as well for card readers, as well as SpiceAPI-over-serial.
Options tab / Advanced options tab
Graphics
(Note that graphics-related features do not work some games, such as Jubeat, Chase Chase Jokers, Busou Shinki)
Windowed mode adjustments
Most games can be run in Windowed Mode (-w). But you can also specify the following:
Window Border Style (-windowborder)- such as making a window borderlessWindow Size (-windowsize)- specify exact width/height in pixelsWindow Position (-windowspos)- specify exact x/y coordinates of the windowWindow Always On Top (-windowalwasyontop)
Can also be accessed by pressing Toggle Screen Resize overlay button (F11 by default).
Image resize
Accessed by pressing Toggle Screen Resize overlay button (F11 by default).
You can freely move and resize the game's image being displayed on the screen, mostly designed for full screen mode. This can be useful for:
- Compensating for CRT overscan
- Making the game smaller than your monitor (if your monitor is too big)
- Zooming into specific part of the screen (if your monitor is too small and you want to see better)
and so on.
You can also bind a key to Screen Resize button. This gives you the abilty to toggle the resize feature on and off using a key, which can be useful (e.g., you only want to zoom into a specific part of the screen during the game, but zoom out in the menu).
You can also have multiple resize values saved as a scene, and bind overlay shortcuts to switch between scenes.
DirectX 9on12
Most of the supported games use DirectX 9. AMD cards at known to have less than perfect support for DX9. Some GPUs - such as Intel dGPUs - don't out don't support DX9. In these cases, you may want to enable DirectX 9 on 12 (-9on12) flag which enables the D3D9On12 translation layer to run DX9 games using DX12.
Force Refresh Rate
If the game boots into the wrong refresh rate for whatever reason, you can use Force Refresh Rate (-graphics-force-refresh) and manually override the monitor refresh rate that will be used in full screen (in Hz).
Most games will launch will the correct refresh rate, but there are some games (such as popn) that will just keep the refresh rate that was being used before launching the game, which can be annoying, but this option can be used to fix that.
Only Use One Display
Some multi-monitor games will take over all of your screens, which may not be desirable if you want to see other windows while the game is running.
You can use Only Use One Monitor (-graphics-force-single-adapter) option to restrict the game to only use the primary monitor.
Subscreens overlay will still work with this.
Auto-rotate Display
Some games require your monitor to be in portrait mode.
You can use Auto-rotate Display (-autoorientation) option to automatically rotate the screen when the game launches.
It's not perfect, due to DirectX9 jank. Hover over the (?) marker next to this option to see more tips if it doesn't work properly.
Disable D3D9 device hooks
This was originally intended for IIDX play record function to work, but it is no longer required. See this page for more details.
NVIDIA profile optimization
Applies to NVIDIA GPUs only.
When a game is launched with this option set, a new 3D application profile is added for spice.exe / spice64.exe, depending on what was launched. The profile is then modified to disable G-SYNC, and set power management to Prefer maximum performance.
Sometimes, due to unknown NVIDIA issues, G-SYNC doesn't get disabled properly. This seems to happen occasionally for SDVX, for example. If this happens, try enabling FSO (full screen optimizations) for spice, or just disable G-SYNC globally in NVIDIA settings.
It should be noted that unchecking the option does not remove the 3D application profile! This is an intentional choice to avoid destructive behavior. To manually revert the changes made, open NVIDIA Control Panel, go to 3D Settings, Program Settings, find spice.exe / spice64.exe, and delete the profiles.
Audio
Read this page which goes into detail about various audio options.
Read this page for Asus Xonar AE specific instructions.
SpiceCompanion and API
API server can be started by specifying API TCP Port number (-api) and optionally, API Password (-apipass).
The API server will start automatically when a game launches and become available on the local network.
SpiceCompanion apps require that you set up the API server. Get Android and iOS versions, install them onto your device, and connect to your PC that is hosting the API server, using the host server's local IP address, port, and password. Do note that those apps are owned and published by independent developers and not associated with spice2x dev team.
Spice API is also available over the serial port (-apiserial and -apiserialbaud).
Performance
Process Priority, Process Affinity and Log Level options are touched on over here.
Others
Auto Card Insert - continuously insert card(s); equivalent to taping a card to the card reader on a cabinet. This is used so that you don't have to press the Insert Card button, ever.
P1 Auto PIN Entry / P2 Auto PIN Entry - automatically enters your 4-digit PIN with a press of a button. Set your pin in the option (-autopin0 or -autopin1), bind a key in Overlay tab for P1 Auto PIN Entry / P2 Auto PIN Entry. Once in game, at PIN entry screen, press the key bind to have spice automatically enter 4-digit sequence. You can also use this in IIDX TDJ when combined with -iidxsubpoke option.
Discord Rich Presence - when enabled, allows Discord to detect the running game and set as your current activity (Now playing). Remember that this is a per-game setting, so you must enable it for every game you want Discord to detect. App ID can be overridden using Discord RPC AppID Override (-discordappid) option.
Misc. information
Disabling I/O hooks
- If you specify the DLL via -exec option, most I/O hooks are disabled, as well as any game specific hooks.
- e.g.,
spice64.exe -exec bm2dx.dll -modules modulescauses game to launch bm2dx but without I/O emulation or IIDX-specific hooks. - If you still need to enable things selectively,
- you can specify
-ioto enable all I/O hooks again - only enable partial I/O emulation using things like
-acio-icca-device-extdev-sciunit - forcibly enable the game specific hooks (e.g.,
-iidx,-sdvx-gd) if you need those
- you can specify
- There are also other options such as
-devicehookdisablewhich may be needed.
- e.g.,
- This is typically used on arcade cabinets (cabs) where you have real I/O hardware. However, if you only have partial I/O, the options may not be
granular enough.
- The exact combination of flags depends on your set up, so there is no "correct answer" here.
- Do note that, as explained below, spice creates config files in
%appdata%, which is often not persisted on a cab. You would need to write a batch script or redirect the config file to save settings.
Bonus features for games
- These games that are not normally touch games can be played with a touch screen: DANCERUSH, Jubeat.
- IIDX LDJ and DANCERUSH have subscreens displaying LED.
Config files
The config files for Spice are stored in %appdata%:
%appdata%\spicetools.xml
For builds prior to 25-04-25, the following files are used for some of the optional features:
%appdata%\spicetools_card_manager.json%appdata%\spicetools_screen_resize.json%appdata%\spicetools_patch_manager.json%appdata%\spicetools_camera_control.json
For build 25-04-25 and onward, those optional JSON files will be saved in a subdirectory instead. The spice2x subdirectory will be tried first, and then fall back to the root of %appdata% if the files don't exist.
%appdata%\spice2x\*.json
You can override the path for some of these files - e.g., -cfgpath. Just make sure you always pass it in via the command line, for all spicecfg.exe, spice.exe, and spice64.exe. If you just double click on spicecfg.exe then you would be using the default config file.