MrPoulpi Labs
PMMS

Available scripts

FR
Documentation centre

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 number
metres
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 number
metres
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 number
metres
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 number
metres (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 number
pixels
1920 DUI browser width (1280 in the original resource).
Read by: client — config.lua
Config.dui.screenHeight number
pixels
1080 DUI browser height (720 in the original resource).
Read by: client — config.lua
Config.dui.timeout number
milliseconds
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 number
milliseconds
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.com instead of youtube%.com): the dot matches any character, the list becomes more permissive than intended.
  • maxRange lowered below defaultRange: the default range is brought down to maxRange.

Search

Type a term: setting, export, error…