Below is a breakdown of each section of the `config.yml` file and its purpose. You can find a full example of the file in the [config.example.yml](https://github.com/rommapp/romm/blob/master/examples/config.example.yml) file.
---
## Exclude Section
Control which platforms, ROMs, or files to ignore during scanning.
### Platforms
Exclude entire platforms (folders) from being scanned.
**Example:**
```yaml
exclude:
platforms: ["ps", "ngc", "gba"]
```
### ROMs
Fine-tune which ROMs or files are excluded.
#### Single File ROMs
Applies to ROMs that are single files (not in subfolders).
- **extensions**: Exclude files by extension
- **names**: Exclude files by name or pattern (supports Unix wildcards)
**Example:**
```yaml
exclude:
roms:
single_file:
extensions: ["xml", "txt"]
names: ["info.txt", "._*", "*.nfo"]
```
#### Multi-File ROMs
Applies to ROMs stored as folders (multi-disc, with DLC, etc.).
- **names**: Exclude entire folders by name
- **parts.names**: Exclude files by name or pattern from within multi-file ROM folders
- **parts.extensions**: Exclude files by extension from within multi-file ROM folders
**Example:**
```yaml
exclude:
roms:
multi_file:
names: ["final fantasy VII", "DLC"]
parts:
names: ["data.xml", "._*"]
extensions: ["xml", "txt"]
```
---
## System Section
Customize how RomM interprets your folder and platform names.
### Custom Folder Names
Map your custom folder names to RomM's recognized platform names.
**Example:**
```yaml
system:
platforms:
gc: "ngc" # Treats 'gc' folder as GameCube
psx: "ps" # Treats 'psx' folder as PlayStation
```
### Versions
Associate a platform with its main version. This also tells RomM to fetch metadata from the main version source.
**Example:**
```yaml
system:
versions:
naomi: "arcade"
```
---
## Filesystem Section
Specify the folder name where your ROMs are located if it differs from the default.
**Example:**
If your ROMs folder is named `my_roms` instead of `roms`:
```yaml
filesystem:
roms_folder: "my_roms"
```
---
## Scan Section
Configure metadata scanning priorities and media assets to download.
### Priority
Customize the order in which metadata providers are queried during scans.
#### Metadata
Controls metadata provider priority order.
**Provider list in default order:**
- `igdb` - IGDB (highest priority)
- `moby` - MobyGames
- `ss` - Screenscraper
- `ra` - RetroAchievements
- `launchbox` - Launchbox
- `gamelist` - ES-DE gamelist.xml
- `hasheous` - Hasheous
- `flashpoint` - Flashpoint Project
- `hltb` - HowLongToBeat (lowest priority)
**Example:**
```yaml
scan:
priority:
metadata:
- "igdb"
- "ss"
- "moby"
```
#### Artwork
Controls artwork provider priority order for cover art and screenshots.
**Default:** Same as `priority.metadata`
**Example:**
```yaml
scan:
priority:
artwork:
- "igdb"
- "ss"
- "moby"
```
#### Region
Sets preferred region for cover art and game title (Screenscraper only).
**Default:** `["us", "wor", "ss", "eu", "jp"]`
**Example:**
```yaml
scan:
priority:
region:
- "us"
- "eu"
- "jp"
```
#### Language
Sets preferred language for cover art and game title (Screenscraper only).
**Default:** `["en", "fr"]`
**Example:**
```yaml
scan:
priority:
language:
- "en"
- "es"
- "fr"
```
### Media
Configures which media assets to download (Screenscraper and ES-DE gamelist.xml only).
**Media types:**
- `box2d` - Normal cover art (always enabled)
- `box3d` - 3D box art
- `miximage` - Mixed image of multiple media
- `physical` - Disc, cartridge, etc.
- `screenshot` - Screenshot (enabled by default)
- `title_screen` - Title screen
- `marquee` - Transparent logo
- `fanart` - User uploaded artwork
- `bezel` - Bezel displayed around the EmulatorJS window
- `manual` - Manual in PDF format (enabled by default)
- `video` - Gameplay video (warning: large file size)
**Example:**
```yaml
scan:
media:
- box2d
- screenshot
- manual
- bezel
```
---
## EmulatorJS Section
Configure EmulatorJS per-core options and controls.
### Debug
Enable debug mode to log available options to the browser console.
**Example:**
```yaml
emulatorjs:
debug: true
```
### Cache Limit
Cache limit per ROM in bytes. Set to `null` for unlimited.
**Example:**
```yaml
emulatorjs:
cache_limit: 52428800 # 50 MB
```
### Settings
Configure core-specific settings. Use `default` to apply settings to all cores.
**Example:**
```yaml
emulatorjs:
settings:
parallel_n64: # Use the exact core name
vsync: disable
snes9x:
snes9x_region: ntsc
default: # These settings apply to all cores
fps: show
```
### Controls
Map keyboard and controller controls for each player.
**Example (2-player SNES):**
```yaml
emulatorjs:
controls:
snes9x:
0: # Player 1
0: # Button mapping
value: x # Keyboard mapping
value2: BUTTON_2 # Controller mapping
1: # Player 2
0:
value: /
value2: BUTTON_2
```
See [EmulatorJS documentation](https://emulatorjs.org/docs4devs/control-mapping/) for control mapping details.
---
!!! tip
You can find examples of full binded batocera or es-de config files.
!!! warning
Only uncomment or add the lines you need. Any omitted or empty sections will use RomM's defaults.
For a full example, see the config.example.yml file.