Consoul user guide
Consoul is a controller-friendly desktop launcher for an existing emulation setup. It finds ROM files in folders you choose, presents them as a console library, and starts each game with the emulator and command-line arguments you provide.
Consoul does not include emulators, ROMs, BIOS files, or game artwork. Install and test your emulators separately, and only use game files you are legally entitled to use.
Before you begin
You will need:
- Consoul installed on Windows, macOS, or Linux
- One or more working emulators
- ROMs stored in a folder for each console
- The full path to each emulator executable and ROM folder
- Optional console logos, backgrounds, and box art
Test a game directly in its emulator before adding it to Consoul. This makes path, BIOS, core, and controller problems much easier to identify.
Installing the unsigned macOS alpha
The current macOS alpha is not yet signed and notarised with an Apple Developer ID. After copying Consoul.app into your Applications folder, macOS Gatekeeper may prevent it from opening. Until signed builds are available, open your terminal and remove the quarantine attribute from the app:
xattr -dr com.apple.quarantine /Applications/Consoul.app
Now you will be able to open Consoul. Only use this command for a copy of Consoul downloaded from the official Consoul website; removing quarantine bypasses one of macOS's security checks for that app. This step will no longer be necessary once Consoul is signed and notarised.
Configuration is done in JSON
Consoul has no first-run setup wizard (yet). All configuration is stored in consoul.config.json. Edit this file in a plain-text or code editor. Do not use a word processor.
The active configuration file is located at:
- Windows:
%APPDATA%\consoul\consoul.config.json - macOS:
~/Library/Application Support/consoul/consoul.config.json - Linux:
~/.config/consoul/consoul.config.json
Consoul creates the file on first launch. If you cannot find it, launch Consoul once and close it, then look again. Packaged updates do not overwrite your copy.
When running Consoul from its source code, the active file is consoul-app/consoul.config.json instead.
Consoul watches the active file for changes. Most library, artwork, sorting, sound, window-size, fullscreen, and kiosk changes are applied while the app is open. If a change does not appear, restart Consoul.
JSON rules
- Keep property names and text inside double quotes.
- Separate items with commas, but do not add a comma after the final item.
- Use
trueandfalsewithout quotes. - On Windows, either use forward slashes (
C:/Games/NES) or escape each backslash (C:\\Games\\NES). - Keep each emulator
idunique. - Make a backup before large edits. Invalid JSON prevents Consoul from loading its configuration.
A minimal configuration
Replace every example path with a path on your own computer:
{
"app": {
"fullscreen": true,
"kiosk": false,
"width": 1920,
"height": 1080,
"autoHideMenuBar": true,
"sfxEnabled": true,
"sfx": {
"navVolume": 0.3,
"launchVolume": 0.7
},
"sortEmulatorsBy": "year"
},
"emulators": [
{
"display": true,
"id": "SNES",
"label": "Super Nintendo",
"year": "1992",
"category": "Nintendo",
"icon": "assets/logos/snes.png",
"bg": "assets/backgrounds/snes-bg.jpg",
"boxart": "D:/Consoul/boxart/snes",
"exec": "C:/Emulators/RetroArch/retroarch.exe",
"args": ["-f", "-L", "C:/Emulators/RetroArch/cores/snes9x_libretro.dll", "{rom}"],
"romDir": "D:/Games/SNES",
"extensions": [".sfc", ".smc", ".zip"],
"supportsBackArt": true
}
]
}
App settings
The app object controls Consoul itself.
| Setting | What it does |
|---|---|
fullscreen |
Opens the window fullscreen. |
kiosk |
Uses kiosk mode. Kiosk mode also forces a fullscreen presentation. |
width, height |
Initial window size in pixels. Defaults to 1920 × 1080. |
minWidth, minHeight |
Optional minimum window size. Defaults to 1040 × 660. |
autoHideMenuBar |
Hides the application menu bar when true. |
backgroundColor |
Optional window background colour, such as "#000000". |
sfxEnabled |
Enables or disables navigation and launch sounds. |
sfx.navVolume |
Navigation volume from 0 to 1. |
sfx.launchVolume |
Game-launch volume from 0 to 1. |
sortEmulatorsBy |
Use "year" or "category". |
Adding a console or emulator
Add one object to the emulators array for every console you want to show.
| Setting | Required | What it does |
|---|---|---|
display |
No | Set to false to keep an entry configured but hide it. Defaults to true. |
id |
Yes | Unique internal console name. Launching and some built-in artwork behavior use this value. |
label |
No | Friendly console name. Defaults to id. |
year |
Recommended | Release year used by year sorting. |
category |
Recommended | Manufacturer or group used by category sorting. |
icon |
No | Path to the console logo shown in the top row. |
bg |
No | Path to the background image shown for this console. |
romDir |
Yes | Folder Consoul scans for games. Only files directly inside this folder are scanned. |
extensions |
Yes | File extensions to include, including the leading dot. Matching is case-insensitive. |
exec |
Yes | Full path to the emulator executable. |
args |
Yes | Command-line arguments passed to the emulator. Put "{rom}" where the selected ROM's full path must be inserted. |
boxart |
No | Folder containing front cover images. |
placeholder |
No | Custom fallback image used when cover art is missing. |
supportsBackArt |
No | Set to true to allow front/back cover flipping for that console. |
Consoul does not search ROM subfolders. It displays matching files alphabetically and removes only the final file extension from each displayed title.
Launch arguments
args must be a JSON array with one command-line argument per item. Consoul replaces an item that is exactly "{rom}" with the selected ROM path.
For a standalone emulator:
"exec": "C:/Emulators/DuckStation/duckstation-qt-x64-ReleaseLTCG.exe",
"args": ["-batch", "-fullscreen", "{rom}"]
For RetroArch, include the core after -L:
"exec": "C:/Emulators/RetroArch/retroarch.exe",
"args": ["-f", "-L", "C:/Emulators/RetroArch/cores/mesen_libretro.dll", "{rom}"]
Arguments vary by emulator and operating system. Check your emulator's command-line documentation. Test the same executable, arguments, and ROM from a terminal if a game will not launch.
ROMs and game names
Place each console's games in its configured romDir. For example:
D:/Games/SNES/
├── Chrono Trigger.sfc
├── Donkey Kong Country.sfc
└── Super Metroid.sfc
With "extensions": [".sfc"], these appear without their file extensions. Multi-file games should use the format you normally launch, such as .cue, .gdi, or .m3u, rather than also listing every track format. This avoids duplicate entries.
Box art
Set boxart to the folder holding front covers. An artwork filename must exactly match the displayed ROM name. Consoul checks .jpg, .png, then .webp.
D:/Consoul/boxart/snes/
├── Chrono Trigger.jpg
├── Donkey Kong Country.png
├── Super Metroid.webp
└── back/
├── Chrono Trigger.jpg
└── Super Metroid.jpg
Capitalisation may matter on macOS. Back covers belong in a back folder inside the front-cover folder; set supportsBackArt to true. If no front cover exists, Consoul uses the configured placeholder, then a built-in placeholder when one is available.
Looking for artwork? Visit the downloads page for links to recommended community box-art packs.
Console logos and backgrounds
icon, bg, and placeholder can reference a bundled Consoul asset with a relative path, or a local image with an absolute path:
"icon": "assets/logos/snes.png",
"bg": "D:/Consoul/backgrounds/snes.jpg",
"placeholder": "D:/Consoul/placeholders/snes.png"
Missing image files do not prevent ROMs from appearing, but the associated visual will be blank or use a fallback.
Controls
Keyboard and mouse
| Control | Action |
|---|---|
| Left / Right Arrow | Select a console. |
| Up / Down Arrow | Select a game. |
| Enter | Launch the selected game. |
J |
Flip between front and back cover art when available. |
M |
Toggle sound and save the change to the JSON file. |
| Escape | Open or close the settings panel. |
| Mouse click | Select a console, or select and launch a game. |
Gamepad
Consoul reads the first connected standard-mapped gamepad.
| Control | Action |
|---|---|
| D-pad / left stick | Move through consoles and games. |
| Primary face button | Select or launch. |
| Secondary face button | Return focus to the console row. |
| Top face button | Flip cover art when available. |
| Options / Start | Open or close settings. |
| Share + Options, held for one second | Exit Consoul. |
Controller mapping follows the browser's standard gamepad layout and can differ for non-standard controllers. Configure in-game controls in the emulator itself; Consoul only controls the launcher.
Troubleshooting
Consoul reports a configuration error or does not open
- Validate
consoul.config.jsonwith a JSON validator. - Check for missing commas, trailing commas, unescaped Windows backslashes, or smart quotes.
- Restore your backup and reapply recent changes one at a time.
A console is missing
- Confirm its object is inside the
emulatorsarray. - Confirm
displayis not set tofalse. - Give it a unique
id. - Save the file and allow a moment for Consoul to reload it.
No games are shown
- Confirm
romDirexists and uses an absolute path. - Confirm the games are directly inside that folder, not in subfolders.
- Add the correct extensions, including the leading dot, to
extensions. - Confirm Consoul has permission to read the folder or external drive.
- If the library is on a removable drive, make sure it is connected at the same path.
A game does not launch
- Confirm
execpoints to the executable itself, not just its folder. - Confirm
argscontains an item that is exactly"{rom}". - Check emulator-specific flags and any RetroArch core path.
- Test the emulator and ROM outside Consoul first.
- Check that BIOS, firmware, and emulator permissions are already configured.
Artwork is missing
- Match the image's base filename to the displayed ROM name exactly.
- Use
.jpg,.png, or.webp. - Confirm
boxartpoints to the front-cover folder. - Put back covers in the
backsubfolder and enablesupportsBackArt. - On macOS and Linux, check filename capitalisation.
Changes do not appear
- Confirm you edited the active per-user file, not the template inside the installed application.
- Wait a second for the configuration watcher.
- Restart Consoul if necessary.
Updating Consoul
Your active per-user consoul.config.json is kept separately from the installed application, so installing a newer packaged build does not replace it. Back it up periodically, especially before changing many emulator entries.
