Requirements#
| Resource | Required | Notes |
|---|---|---|
| ox_lib | Yes | Key hint UI, notifications and progress bars |
| pma-voice | Yes | Any mumble based voice script works, pma-voice is the tested one |
| qb-target or ox_target | Optional | Used for the placed gas tank. Without a target script a key based fallback is used |
| Framework | Yes | QBCore, QBox or ESX. Detected automatically |
| Inventory | Yes | ox_inventory, qb-inventory and all qb forks, qs, codem, tgiann, core, origen. Detected automatically |
Step 1 - Add the resource#
Drag the frkn-helium folder into your resources directory, for example:
resources/frkn-helium
Step 2 - Start the resource#
Add this to your server.cfg, after ox_lib and your voice script:
ensure ox_lib
ensure pma-voice
ensure frkn-helium
If your resources folder is already started as a group, for example ensure [qb], you do not need a separate line.
Step 3 - Add the items#
Three items: one balloon per gas plus a single tank that serves them all. Helium pitches the voice up, sulfur hexafluoride pitches it down.
| Item | What it is |
|---|---|
helium_balloon | Balloon for helium, squeaky voice |
sf6_balloon | Balloon for sulfur hexafluoride, deep voice |
helium_tank | The gas tank. Placed on the ground, it refills whichever balloon a player is holding |
QBCore - qb-core/shared/items.lua
helium_balloon = { name = 'helium_balloon', label = 'Helium Balloon', weight = 100, type = 'item', image = 'helium_balloon.png', unique = true, useable = true, shouldClose = true, description = 'A balloon filled with helium. Makes your voice squeaky.' },
sf6_balloon = { name = 'sf6_balloon', label = 'SF6 Balloon', weight = 100, type = 'item', image = 'sf6_balloon.png', unique = true, useable = true, shouldClose = true, description = 'A balloon filled with sulfur hexafluoride. Makes your voice deep.' },
helium_tank = { name = 'helium_tank', label = 'Gas Tank', weight = 4000, type = 'item', image = 'gas_tank.png', unique = true, useable = true, shouldClose = true, description = 'An industrial gas tank. Place it down and let people refill their balloons.' },
ox_inventory - ox_inventory/data/items.lua
['helium_balloon'] = {
label = 'Helium Balloon',
weight = 100,
stack = false,
close = true,
description = 'A balloon filled with helium. Makes your voice squeaky.'
},
['sf6_balloon'] = {
label = 'SF6 Balloon',
weight = 100,
stack = false,
close = true,
description = 'A balloon filled with sulfur hexafluoride. Makes your voice deep.'
},
['helium_tank'] = {
label = 'Gas Tank',
weight = 4000,
stack = false,
close = true,
description = 'An industrial gas tank.'
},
ESX with a database item table
INSERT INTO items (name, label, weight) VALUES
('helium_balloon', 'Helium Balloon', 1),
('sf6_balloon', 'SF6 Balloon', 1),
('helium_tank', 'Gas Tank', 4);
Every one of them must be unique / stack = false. Each balloon and tank carries its own gas amount in metadata, stacking them would merge different gas levels into one item.
The tank item is called helium_tank by default, rename it in Tank.item in shared/config.lua if you prefer something like gas_tank.
Only want helium? Delete the sf6 line from Gases in shared/config.lua and skip that item. Want a third gas? Add a line with a unique id and create one balloon item for it, the tank already covers it.
Step 4 - Copy the item images#
Three images ship with the resource in the itemimages folder: helium_balloon.png, sf6_balloon.png and gas_tank.png. Copy them into your inventory:
| Inventory | Target folder |
|---|---|
| ox_inventory | ox_inventory/web/images |
| qb-inventory | qb-inventory/html/images |
| qs-inventory | qs-inventory/html/images |
Step 5 - Set your language#
Open shared/config.lua:
Language = "en",
Available out of the box: ar, de, en, es, fr, it, pt, ru, tr.
Installation is done. Give yourself a balloon and a tank, then read the Features page to learn the controls.
The microphone permission#
The voice effect pitch shifts the player's real microphone, so FiveM asks each player once to allow microphone access (F8 → Allow, remembered per server). Nothing has to be installed.
By default a balloon can only be used after that permission was given (Voice.requireMic = true in shared/config.lua), which guarantees everyone is heard with the real pitch shift. Using a balloon without permission opens the prompt and retries automatically once allowed.
The Voice System page explains how it works and how to relax or disable it.
Troubleshooting#
| Problem | Fix |
|---|---|
| Using an item does nothing | Make sure the item exists in your inventory config with useable = true, and that you ran refresh after adding the resource |
| No key hint box appears when using a balloon | ox_lib is not started, or it is started after frkn-helium |
| Placed tanks disappear after a restart | That is intended, placed tanks are not saved. Players pick them back up with the take option |
| The fallback voice effect does nothing | setr voice_useNativeAudio true is missing from server.cfg |
| Balloon prop is invisible | The stream folder is missing or was not copied, the balloon and tank models are streamed by the resource |
Texts show as raw keys like hud_inhale | Language is set to a code with no file in the locales folder |
⚠️ Upgrading from an older version?#
Older versions required native audio. This is no longer needed — remove the line below from your server.cfg:
setr voice_useNativeAudio true
Leaving it enabled can cause choppy audio and voices sounding distant or coming from the wrong direction — not just for this script, but for all voice chat on your server.
A full server restart is required after removing it (a resource restart is not enough).