PMMS configuration reference
Every PMMS config.lua and config.server.lua setting with its value in the archive, its bounds, the side that reads it and its real effect.
Goal: know every setting, its shipped value and its real effect.
Files: pmms/config.lua (loaded by the client and the server) and pmms/config.server.lua (server only). Restart the resource after a change: restart pmms.
Bounds marked “server” are applied by the server when a player starts: an out-of-bounds value is brought back to the limit, a missing value takes the default.
Game
| Setting | Type | Default | Effect |
|---|---|---|---|
Config.isRDR | boolean | auto | Automatic RedM / GTA V detection, computed by IsDuplicityVersion() and GetConvar("gamename", "gta5") == "rdr3" or not TerraingridActivate. On the client it is true when the TerraingridActivate native does not exist (RedM). It is the starting value of enableFilterByDefault, defaultModel and allowPlayingFromVehicles. Do not replace it with a fixed value without a reason. On the server the expression ends with “or not TerraingridActivate”: as this is not a server native, the server result is true even on GTA V. See Troubleshooting. Read by: client + server — config.lua |
Media player discovery
| Setting | Type | Default | Effect |
|---|---|---|---|
Config.maxDiscoveryDistance | numbermetres | 30.0 | Maximum distance at which an inactive media player appears in the panel, and search radius of the “closest media player” used by the play, pause and stop commands. Read by: client — config.lua |
Sound and range
| Setting | Type | Default | Effect |
|---|---|---|---|
Config.defaultSameRoomAttenuation | number | 4.0 | Default attenuation multiplier when the listener is in the same room as the media player. The higher the value, the faster the sound fades with distance. Bounds: 0 to 10 (server bound) Read by: server — config.lua |
Config.defaultDiffRoomAttenuation | number | 6.0 | Default attenuation multiplier when the listener is in another room (different interior, or outside the playing vehicle). Bounds: 0 to 10 (server bound) Read by: server — config.lua |
Config.defaultRange | numbermetres | 30.0 | Default range of an active media player: beyond it, it is no longer heard or shown. Bounds: 0 to maxRange Read by: server — config.lua |
Config.maxRange | numbermetres | 140.0 | Maximum range a player or an export can set; any higher value is brought down to this cap. Also used to compute defaultMediaPlayerSpawnDistance. The original resource used 200. Read by: client + server — config.lua |
Config.defaultDiffRoomVolume | number | 0.25 | Base volume difference between the same room and a different room. Bounds: 0 to 1 (server bound) Read by: server — config.lua |
Config.enableFilterByDefault | boolean | Config.isRDR | “Immersive” filter applied when the filter option is not given: radio effect (mono sound and reduced bandwidth) on GTA V, phonograph with sepia tint on RedM. False on a GTA V client. The server applies its own value to players started without filter (exports, default media players); with isRDR evaluated to true server side, those players start filtered. Set filter = false in the options. Read by: client + server — config.lua |
Attenuation and range can also be set per player in the panel, per model in Config.models, or per start option (see Commands).
Video
| Setting | Type | Default | Effect |
|---|---|---|---|
Config.defaultVideoSize | number | 30 | Default size of the NUI video screen shown above the entity, used when the model has no renderTarget. Bounds: 10 to 100 (server bound) Read by: server — config.lua |
Config.defaultScaleformName | string | "pmms_texture_renderer" | Scaleform used to show a video on a free-standing screen (stream/pmms_texture_renderer.gfx). Read by: client — config.lua |
Models, presets and default media players
| Setting | Type | Default | Effect |
|---|---|---|---|
Config.models | table | { … } (122 modèles) | Entity models usable as media players, keyed by hash. Optional fields: label, renderTarget, filter, volume, attenuation, diffRoomVolume, range, isVehicle, scaleform. 102 models declare a renderTarget (screen). Read by: client + server — config.lua |
Config.defaultModel | hash | Config.isRDR and `p_phonograph01x` or `prop_boombox_01` | Model created by the createMediaPlayer export and by default media players to spawn when no model is given. On GTA V: prop_boombox_01. Read by: client — config.lua |
Config.presets | table | {} | Predefined media, keyed by a short name. url required; title, filter, video optional. Without the pmms.customUrl permission, a player can only play these presets. Read by: client + server — config.lua |
Config.defaultMediaPlayers | table | {} | Media players placed by configuration: position required, then label, spawn, model, rotation, invisible, url, title, volume, offset, loop, filter, locked, video, videoSize, muted, attenuation, range, scaleform. Those with a url start with the resource. Read by: client + server — config.lua |
Config.defaultMediaPlayerSpawnDistance | numbermetres (150 by default) | Config.maxRange + 10.0 | Distance at which default media players marked spawn = true appear and disappear around the player. Read by: client — config.lua |
The detailed format of these tables and copyable examples are in Models, screens and presets.
DUI page
| Setting | Type | Default | Effect |
|---|---|---|---|
Config.dui.urls.https | string | "https://pmms-dui.mrpoulpiii.fr" | DUI page loaded by every client to show an https:// video on a screen (renderTarget or scaleform). The client depends on this external page being available. Read by: client — config.lua |
Config.dui.urls.http | string | absent | DUI page for http:// media. When absent, the client uses http://<server>/pmms/dui/, served by httpmanager from pmms/http/dui, a folder the archive does not contain. Read by: client — config.lua |
Config.dui.screenWidth | numberpixels | 1920 | DUI browser width (1280 in the original resource). Read by: client — config.lua |
Config.dui.screenHeight | numberpixels | 1080 | DUI browser height (720 in the original resource). Read by: client — config.lua |
Config.dui.timeout | numbermilliseconds | 30000 | Maximum wait for the DUI page connection. Past it, F8 shows “Failed to initialize DUI browser”. Read by: client — config.lua |
Commands
| Setting | Type | Default | Effect |
|---|---|---|---|
Config.commandPrefix | string | "pmms" | Name of the main command and prefix of the others. The key binding runs this command. If you change it, rename the command.pmms… entries in permissions.cfg. Read by: client + server — config.lua |
Config.commandSeparator | string | "_" | Separator between the prefix and the command name (pmms_play). Read by: client + server — config.lua |
Interface
| Setting | Type | Default | Effect |
|---|---|---|---|
Config.audioVisualizations | table | { … } (20 visualisations) | Offered audio visualisations (Wave.js). The key is the visualisation type; name is the displayed label. The entry’s other properties (type, stroke, colors…) are passed as is to Wave.js. Read by: NUI interface — config.lua |
Config.showNotifications | boolean | true | Shows pmms notifications: errors sent by the server (permission refused, URL refused…), “no media player nearby”, status toggle and reset. The volume display (/pmms_vol without a value) and “no presets” are always shown. Read by: client — config.lua |
Config.notificationDuration | numbermilliseconds | 5000 | Default duration of a notification sent to PMMSBridge.notify. Read by: client — config.lua |
Immersion
| Setting | Type | Default | Effect |
|---|---|---|---|
Config.allowPlayingFromVehicles | boolean | not Config.isRDR | Treats nearby vehicles as media players. Vehicles do not go through Config.models nor the pmms.anyEntity permission: with true, any nearby vehicle can be used. Read by: client — config.lua |
Config.autoDisableStaticEmitters | boolean | true | Mutes the map’s static sound emitters listed in staticEmitters.lua (301 entries) while a media is audible, then restores them. Read by: client — config.lua |
Config.autoDisableIdleCam | boolean | true | Prevents the idle camera from starting while a media is audible. Read by: client — config.lua |
Config.autoDisableVehicleRadio | boolean | true | Turns off the GTA radio of a vehicle playing a media (no effect on RedM). Read by: client — config.lua |
URLs and limits
| Setting | Type | Default | Effect |
|---|---|---|---|
Config.allowedUrls | string[] | { youtube.com, youtu.be, twitch.tv } | Lua patterns of the URLs allowed for a player who has pmms.customUrl without pmms.anyUrl. With the shipped permissions.cfg everyone has pmms.anyUrl, so this list is not applied. Read by: server — config.lua |
Config.oneMediaPerPlayer | boolean | true | A player cannot start (nor queue) a new media while the previous one they started is active. The slot frees up when that media stops or when the player disconnects. Read by: server — config.lua |
Config.allowedUrls holds Lua patterns, not regular expressions: escape the dot with %., anchor with ^ and $.
Config.allowedUrls = {
"^https?://w?w?w?%.?youtube.com/.*$",
"^https?://w?w?w?%.?youtu.be/.*$",
"^https?://w?w?w?%.?twitch.tv/.*$",
"^https://cdn%.my%-server%.com/music/.*%.mp3$"
}
cdn.my-server.com is an example. This list only applies to players who have pmms.customUrl without pmms.anyUrl.
Key binding
| Setting | Type | Default | Effect |
|---|---|---|---|
Config.keybind.enabled | boolean | true | Creates the command and key binding that open the panel. Read by: client — config.lua |
Config.keybind.command | string | "openPmms" | Name of the client command bound to the key. It runs the Config.commandPrefix command, so the player needs the command.pmms ACE. Read by: client — config.lua |
Config.keybind.label | string | "Ouvrir Radio/TV" | Binding label in Settings › Key Bindings › FiveM, passed through locales.lua. Read by: client — config.lua |
Config.keybind.mapper | string | "keyboard" | Binding device for RegisterKeyMapping (keyboard, mouse_button, pad_digitalbutton…). Read by: client — config.lua |
Config.keybind.key | string | "Q" | Key proposed by default. FiveM remembers each player’s choice: changing this value does not affect a player who already has the binding. Read by: client — config.lua |
Config.keybind.vehicleOnly | boolean | false | true: the binding does nothing on foot. The /pmms command remains usable anywhere. Read by: client — config.lua |
On GTA V, Q is also the “take cover” key: on foot, the binding fires at the same time. Offer another key or set vehicleOnly to true if this bothers your players.
Discord logs
| Setting | Type | Default | Effect |
|---|---|---|---|
ConfigServer.logsEnabled | boolean | true | Enables Discord logs. Nothing is sent while the pmms_webhook convar is empty. Read by: server — config.server.lua |
ConfigServer.logName | string | "PMMS Logs" | Webhook sender name. Read by: server — config.server.lua |
ConfigServer.logColor | number | 5763719 | Embed colour, as a decimal integer (5763719 = #57F287). Read by: server — config.server.lua |
ConfigServer.includeIdentifiers | boolean | false | Adds all the player identifiers (licence, Discord, IP depending on the server…) to every log. This personal data is sent to Discord: keep false unless really needed. Read by: server — config.server.lua |
The webhook itself is not in this file: it is read from the pmms_webhook server convar (see Integrations).
Common mistakes
- Command prefix changed without updating
permissions.cfg: players are no longer allowed to use the renamed commands, nor the key binding. - Unescaped URL pattern (
youtube.cominstead ofyoutube%.com): the dot matches any character, the list becomes more permissive than intended. maxRangelowered belowdefaultRange: the default range is brought down tomaxRange.