Making a Recalbox theme

45 pages · 8 sections
FRENESDE Show everything Create my theme

All the variables

The complete list, and where each one works.

Here are all the variables Recalbox can replace, surveyed from the engine.

A variable is written ${…} and Recalbox replaces it at display time.

The system

What to writeWhat it isWhat it returnsWhere
${system}System nameThe full name — e.g. “Sega Megadrive”Systems, Games
${system.input.keyboard}Keyboard needed?mandatory · recommended · optional · noSystems, Games
${system.input.mouse}Mouse needed?mandatory · recommended · optional · noSystems, Games
${system.input.pad}Controller needed?mandatory · recommended · optional · noSystems, Games
${system.logo}System logoThe path of the logo provided by RecalboxSystems, Games
${system.manufacturer}ManufacturerE.g. “Sega”, “Nintendo”. Empty if unknownSystems, Games
${system.name}Short system nameSystems, Games
${system.releasedate}Year of releaseYear and month — e.g. “1988-10”Systems, Games
${system.type}Machine type (technical name)arcade · console · handheld · computer · engine · port · fantasy · virtual · virtual-arcadeGames, Systems
${system.type.name}Machine typeThe same, in plain words: “Home Console”, “handheld Console”, “Arcade”…Systems, Games

The game

What to writeWhat it isWhat it returnsWhere
${game.developer}DeveloperE.g. “Konami”. “UNKNOWN” if absentScreensaver, Games
${game.file.name}File nameThe file name, extension includedScreensaver, Games
${game.file.path}Full file pathThe full path of the fileScreensaver, Games
${game.file.stem}File name (without extension)The file name, without the extensionScreensaver, Games
${game.genre.normalized}Genre (technical name)The normalized genre, in English — “Platform”, “Shoot’em Up”, “Racing”…Screensaver, Games
${game.genre.raw}GenreThe genre as written in the game's sheetScreensaver, Games
${game.isadult}Adults only?yes or noScreensaver, Games
${game.isfavorite}Is a favorite?yes or no (never true/false)Screensaver, Games
${game.ishidden}Is hidden?yes or noScreensaver, Games
${game.islastversion}Is the latest version?yes or noScreensaver, Games
${game.isnotagame}Is not a game?yes or noScreensaver, Games
${game.ispreinstalled}Is preinstalled?yes or noGames, Screensaver
${game.license}LicenseThe license, often emptyScreensaver, Games
${game.name}Game nameThe name of the gameScreensaver, Games
${game.players}Number of players“1”, “2”, “1-4”, “4+”…Screensaver, Games
${game.players.max}Players — maximumA number — e.g. “4”Screensaver, Games
${game.players.min}Players — minimumA number — e.g. “1”Screensaver, Games
${game.publisher}PublisherE.g. “Sega”. “UNKNOWN” if absentScreensaver, Games
${game.releasedate}Release dateISO date — e.g. “1991-06-23”. “UNKNOWN” if absentScreensaver, Games
${game.synopsis}DescriptionThe presentation text, often longScreensaver, Games

Rating and statistics

What to writeWhat it isWhat it returnsWhere
${game.lastplayed}Last playedISO date, or “NEVER” if never playedScreensaver, Games
${game.rating.10}Rating (out of 10)An integer from 0 to 10Screensaver, Games
${game.rating.100}Rating (out of 100)An integer from 0 to 100Screensaver, Games
${game.rating.5}Rating (out of 5)An integer from 0 to 5 — not starsScreensaver, Games
${game.timesplayed}Number of playsA number of playsScreensaver, Games
${game.totalplayed}Total play timeA duration — e.g. “3h 12m”. “NONE” if zeroScreensaver, Games

The game's images and video

What to writeWhat it isWhat it returnsWhere
${game.media.boxpath}Box artScreensaver, Games
${game.media.imagepath}Cover art / imageThe path of the cover art. Empty if the game has none — see ifexistsScreensaver, Games
${game.media.thumbpath}ThumbnailThe path of the thumbnailScreensaver, Games
${game.media.videopath}VideoThe path of the videoScreensaver, Games

The game's medium

What to writeWhat it isWhat it returnsWhere
${game.support.index}Medium indexThe disc number — empty if there is only oneScreensaver, Games
${game.support.number}Medium numberThe whole thing assembled — e.g. “2A/3”Screensaver, Games
${game.support.side}Medium sideThe side of the medium — A, B…Screensaver, Games
${game.support.total}Number of mediaThe number of media. “UNKNOWN” if unknownScreensaver, Games
${game.support.type}Medium typeCartridge · CD/DVD · Harddisk · Files · Tape · Quick Disc · 3" Floppy · 3".5 Floppy · 5".25 Floppy · PCB · UnknownScreensaver, Games

The game's system

What to writeWhat it isWhat it returnsWhere
${game.system}Name of the game's systemThe full name of the game's systemScreensaver, Games
${game.system.input.keyboard}Keyboard required by the game's systemmandatory · recommended · optional · noScreensaver, Games
${game.system.input.mouse}Mouse required by the game's systemmandatory · recommended · optional · noScreensaver, Games
${game.system.input.pad}Controller required by the game's systemmandatory · recommended · optional · noScreensaver, Games
${game.system.logo}Logo of the game's systemThe path of its logoScreensaver, Games
${game.system.manufacturer}Manufacturer of the game's systemIts manufacturerScreensaver, Games
${game.system.name}Short name of the game's systemIts internal nameScreensaver, Games
${game.system.releasedate}Year of the game's systemIts year of releaseScreensaver, Games
${game.system.type}Type of the game's system (technical name)Like ${system.type}: console · handheld · arcade…Screensaver, Games
${game.system.type.name}Type of the game's systemThe same, in plain wordsScreensaver, Games

Emulator

What to writeWhat it isWhat it returnsWhere
${game.emulator.compatibility}Compatibilityunknown · low · average · good · high · perfectScreensaver, Games
${game.emulator.extensions}Supported extensionsThe supported extensions — e.g. “.bin .gen .md”Screensaver, Games
${game.emulator.hasnetplay}Supports online play?yes or noScreensaver, Games
${game.emulator.hassoftpatching}Accepts patches?yes or noScreensaver, Games
${game.emulator.islibretro}Is a Libretro core?yes or noScreensaver, Games
${game.emulator.name}Emulator nameE.g. “libretro picodrive”Screensaver, Games
${game.emulator.speed}Speedunknown · low · average · good · high · perfectScreensaver, Games

The machine and its settings

What to writeWhat it isWhat it returnsWhere
${display.overscan}Overscan?yes or noScreensaver, Systems, Menu, Games
${random.between(a,b,c)}A random value among…one of the given valueseverywhere
${random.range(1,10)}A random number between…an integer between the two boundseverywhere
${display.resolution}Resolutionfhd (1080p and above) · hd (720p) · vga · qvgaScreensaver, Systems, Menu, Games
${display.tate}Vertical screen (TATE)?yes or noScreensaver, Systems, Menu, Games
${display.tateleft}Rotated to the left?yes or noSystems, Menu, Games, Screensaver
${display.tateright}Rotated to the right?yes or noScreensaver, Systems, Menu, Games
${hardware.board}Machine modelThe model — “RPi 5”, “PC x64”, “RG351P/M”…Screensaver, Systems, Menu, Games
${hardware.crt}CRT screen?yes or noMenu, Games, Screensaver, Systems
${hardware.isanbernic}Is it an Anbernic?yes or noScreensaver, Systems, Menu, Games
${hardware.isodroid}Is it an Odroid?yes or noScreensaver, Systems, Menu, Games
${hardware.ispc}Is it a PC?yes or noScreensaver, Systems, Menu, Games
${hardware.ispi}Is it a Raspberry Pi?yes or noScreensaver, Systems, Menu, Games
${hardware.jamma}Jamma cabinet?yes or noSystems, Menu, Games, Screensaver
${recalbox.built}Build dateThe build dateScreensaver, Systems, Menu, Games
${recalbox.version}Recalbox versionE.g. “10.0”Screensaver, Systems, Menu, Games
${root}Theme folderThe root of the selected theme — to put in front of all your pathsMenu, Games, Screensaver, Systems
${settings.language}LanguageThe language alone — e.g. “fr”Screensaver, Systems, Menu, Games
${settings.locale}Language and countryLanguage and country — e.g. “fr_FR”Screensaver, Systems, Menu, Games
${settings.region}Chosen regioneu · us · jpScreensaver, Systems, Menu, Games
${settings.timezone}Time zoneE.g. “Europe/Paris”Screensaver, Systems, Menu, Games