Skip to content

Configuration

Every option in config.lua, what auto detects, and what each value means.

On this page13

config.lua is one setting per category, plus a debug switch, an icon path and one ESX-only sub-table. 'auto' detects, a name pins the backend, 'custom' calls your own code in the editable files, and false turns the category off. Names match exactly, capitalisation included, apart from 'auto', 'custom' and false.

false resolves to that category's off backend, 'standalone' for framework, inventory, progressbar and banking, 'disabled' for notify, stress, needs and target. Writing those strings directly does the same thing.

Everything resolves once, on startup, and the result is printed to console:

code
[pixel-utils] server links resolved
  framework     qbx
  inventory     ox_inventory
  notify        ox
  progressbar   ox
  stress        qbx_hud
  needs         qbx_hud
  target        ox_target
  banking       qbx_management

A value that matches nothing loads no backend. Most categories say so at startup with a red export "…" is missing line.

Config.Debug

Ships as false. Turn it on and every remap, detection and fallback is logged, prefixed [pixel-utils] [debug].

This one is not normalised like the others. false turns it off, as does leaving the line out entirely, silently, and nothing else does. 'false' written as a string counts as a value rather than a switch, and turns debug logging on.

Config.Framework

ValueNotes
'auto'Checks qbx_core, qb-core, es_extended, in that order.
'qbx'qbx_core
'qb'qb-core
'esx'es_extended
'custom'Your code
falseOff. Money and job lookups return nothing, names fall back to the Steam name

Nothing found falls back to off.

Config.ESX

lua
Config.ESX = {
    useOldExport = false,
}

Read on the server only, and only for very old ESX builds.

Config.Inventory

ValueNotes
'auto'Checks ox_inventory, ps-inventory, qs-inventory, origen_inventory, tgiann-inventory, codem-inventory, minventory, core_inventory, ak47_inventory, one_inventory, jaksam_inventory, qb-inventory, inventory, in that order
'ox_inventory'
'qb-inventory'
'esx_inventory'
'ps-inventory'
'qs-inventory'
'codem-inventory'Also covers minventory
'core_inventory'
'origen_inventory'
'tgiann-inventory'
'jaksam'jaksam_inventory
'ak47_inventory'
'chezza'The resource named inventory, which is the last thing auto checks
'one_inventory'
'framework'Whatever your framework ships with, resolved through the table below
'custom'Your code
falseOff. Items always read 0 and stashes never open

'auto' with nothing detected, and 'framework' written explicitly, both resolve through the table below, so a wrong guess here shows up as another real inventory name rather than as off:

FrameworkInventory
qbxox_inventory
qbqb-inventory
esxesx_inventory
Anything else, custom includedOff. Set Config.Inventory yourself on a custom framework

Config.InventoryImagePath

The nui:// path your inventory serves item icons from. The %s is replaced with the item name.

ValueNotes
A nui:// pathUsed exactly as written, whichever inventory you run

This is a path, not a category, so it has no 'custom' and no off switch.

Config.Notify

ValueNotes
'auto'Checks okokNotify, gs-notify, codem-notification, mythic_notify, 17mov_Hud, ox_lib. ox_lib is required by pixel-utils, so it always matches, and auto never lands anywhere else unless one of the others is installed
'ox'ox_lib notifications
'qb'QBCore or Qbox notifications
'okokNotify'Copy the capitalisation exactly
'mythic'mythic_notify
'codem'codem-notification
'gs-notify'
'17mov'17mov_Hud
'framework'Whatever your framework ships with. Becomes 'standalone' when there is no framework
'standalone'GTA's built-in help prompt. No dependencies
'custom'Your code
falseOff. Nothing is shown

'qb' and 'framework' are not in the detection list, so a QBCore server left on 'auto' gets ox_lib notifications until you say otherwise.

Config.Progressbar

ValueNotes
'auto'ox_lib, which is always running
'ox'ox_lib progress bar
'qb'QBCore's own bar. Qbox has none, so it uses ox_lib there
'framework'Whatever your framework ships with. Becomes 'standalone' when there is no framework
'standalone'No bar on screen. The animation and prop still play and the duration is still waited out, the same backend false resolves to
'custom'Your code
falseSame as 'standalone': no bar on screen, but the animation, prop and duration are unchanged

Config.Stress

ValueNotes
'auto'Checks qbx_hud, qb-hud, hud, esx_status.
'qb-hud'Any HUD using the standard QB metadata and hud:server:GainStress / RelieveStress events
'qbx_hud'
'esx_status'
'custom'Your code
falseOff. Stress always reads 0 and changes do nothing

Config.Needs

Hunger and thirst.

ValueNotes
'auto'Checks qbx_hud, qb-hud, hud, esx_status, in that order
'qb-hud'Any HUD keeping the values in QB metadata and redrawing on hud:client:UpdateNeeds
'qbx_hud'Same events, Qbox player data
'esx_status'
'pixel'pixel-utils stores them itself, for servers with no needs system
'framework'Whatever your framework already keeps hunger and thirst in, resolved through the table below
'custom'Your code
falseOff. Both read 0 and writes do nothing

'auto' with nothing detected, and 'framework' written explicitly, both resolve through the table below, taking whatever your framework already keeps hunger and thirst in rather than pixel-utils' own store. A renamed HUD that auto cannot see keeps its existing write path instead of ending up with two disagreeing sets of values:

FrameworkNeeds
qbqb-hud
qbxqbx_hud
esxesx_status
Anything else, custom and off includedpixel

'pixel' keeps the values in pixel-utils/data/needs.json, one entry per character. New characters start at 100 and nothing drains them, because decay is a HUD's job. pixel-utils draws nothing either. A HUD that wants to render the values listens for pixel-utils:client:needsChanged.

Config.Target

ValueNotes
'auto'Checks ox_target, qb-target, qtarget, sleepless_interact, interact, in that order
'ox_target'
'qb-target'
'qtarget'
'interact'
'sleepless_interact'
'custom'Your code
falseOff. Scripts fall back to their own prompt, or skip the interaction

Config.SocietyBanking

ValueNotes
'auto'Checks Renewed-Banking, okokBanking, fd_banking, s1n_banking, qb-banking, qbx_management, qb-management, p_banking, tgg-banking, wasabi_banking, esx_addonaccount, in that order
'esx_addonaccount'esx_addonaccount with esx_society
'Renewed-Banking'Copy the capitalisation exactly
'okokBanking'Copy the capitalisation exactly
'fd_banking'
's1n_banking'
'qb-banking'
'qb-management'
'qbx_management'
'p_banking'
'tgg-banking'
'wasabi_banking'
'custom'Your code
falseOff. Balances read 0 and transfers do nothing

Config.AdminAce

Ships as 'pixel.admin'. One ace for every Pixel resource, granted once:

cfg
add_ace group.admin pixel.admin allow

Config.CopyPed

Registers /copyped [name], an authoring tool. Stand as the ped you want, run it, and the full appearance is printed to your F8 console and copied to your clipboard as a Lua table ready to paste into any Pixel config that takes an appearance block.

Writing one of those by hand is not realistic. It is 12 components, 5 props, a head blend, 20 face features, 12 overlays and a tattoo list, which is why this exists. It costs nothing at runtime beyond registering one command.

OptionDefaultNotes
enabledtruefalse never registers the command
command'copyped'Command name

Gated by Config.AdminAce.

Clothing is captured as a collection name plus a local index rather than the global one, so a capture survives you adding, removing or reordering DLC clothing packs later.