Browse docs

Configuration

Complete reference for global settings, Music Sync, boombox limits, permissions, music delivery and advanced audio files.

Open /djadmin to manage clubs and global settings. Complete Installation first, then choose how the global configuration should be managed.

Choose SQL or file settings

Config.IngameSettings = true is the default. This switch is read from config/config.lua and requires a resource restart after editing.

ModeActive global settingsWhere to make changes
IngameSettings = trueSaved settings in SQL; a new installation starts with the shipped defaults/djadmin → Settings, then save
IngameSettings = falseValues in config/config.luaEdit the existing file and restart sky_dj
In SQL mode, the other values in the customer config.lua are ignored, including on the first start. The generated source/shared/config_default.lua supplies the shipped defaults. Existing SQL settings take precedence and survive restarts. Editing config.lua is not an import operation; do not edit generated defaults or delete the SQL row to apply a change.

Switching to file mode does not copy saved SQL values into Lua. Review the file settings before switching. It disables global settings saves in-game and leaves the saved SQL settings intact for switching back later. Clubs, speaker and effect layouts, playlists and the boombox journal remain in SQL in either mode.

Sky DJ creates its sky_dj_state table and missing records automatically through sky_base. Back up this table before updating or changing the configuration mode. Sky DJ has its own administration interface; it does not require sky_jobs_base or register a /jobconfig section.

Find a setting

Paths below are relative to the installed sky_dj resource. The reference lists shipped defaults; an existing installation can have different saved values. Numeric ranges are the server's accepted global-settings ranges. Keep file-mode values inside those ranges too.

SectionMain settings
Audio & DJMaxVolume, MaxRadius, InteractDistance, MaxClubs, MarkerDrawDistance
Music & PlaylistsMusicDirectory, MusicStreamingEnabled, MusicStreamingBaseUrl, queue, playlist and track-length limits
Music synchronizationMusicSync.enabled, source deck, bass/melody response, channel selection and quiet-section behavior
Festival groundsFestivalGroundEnabled, FestivalFencesEnabled
BoomboxEnabled state, item placement, command, volume ceiling, fixed range, device/audio limits and carrying
PermissionsAdminCommand, AdminGroups, AdminAce

IngameSettings is a Boolean with default true; it is the file-owned mode switch described above. The remaining Config keys are listed in the sections below. Where the current editor has no control for a compatibility setting, this is stated explicitly.

Audio and DJ limits

Open Settings → Audio & DJ in SQL mode.

SettingDefaultAccepted rangeEffect
MaxVolume2.00.05–2.0Global club-volume ceiling; shown as 5–200% in the editor.
MaxRadius150.0 m5–300 mUpper limit for saved club and individual speaker ranges.
InteractDistance2.5 m1–5 mDJ interaction distance; server-side control checks include a small distance tolerance.
MaxClubs501–100, whole numberMaximum custom clubs; the supplied festival does not count towards this limit.
MarkerDrawDistance20.0 m5–100 mDistance at which the DJ interaction marker is drawn. This does not extend audio range or grant access.

Lua volume values are multipliers: 1.0 means 100%, and 2.0 means 200%. The administration interface displays percentages. The ceiling does not raise each club's saved volume or replace individual speaker tuning. Lower existing club and speaker values before reducing a global limit below them; the server rejects incompatible limits.

Start with the smallest speaker ranges that cover your venue, then tune speaker direction and gain in the club. Increasing marker distance only makes the interaction easier to find. The Mixer and audio guide covers the separate per-club mix and speaker controls.

Administrator and DJ access

The default command is /djadmin. Set AdminCommand without a leading slash when renaming it. An old saved default /clubadmin is migrated to /djadmin; custom saved command names are retained.

SettingDefaultAccepted valueEffect
AdminCommand'djadmin'1–60 characters: letters, digits, _ or -Administration command, without a leading slash.
AdminGroups{ admin = true, superadmin = true }Up to 30 group-name keys; each name 1–60 characters using letters, digits, _ or -, with value trueESX groups allowed to administer Sky DJ. An empty table leaves ACE-based access available.
AdminAce'sky.dj.admin'1–60 characters: letters, digits, _, . or -Additional ACE permission accepted for administration.

The file-mode entries are:

config/config.lua — file mode
AdminCommand = 'djadmin',
AdminGroups = { admin = true, superadmin = true },
AdminAce = 'sky.dj.admin',

Edit these entries inside the existing Config table only when using file mode. In SQL mode, change Settings → Permissions instead. Administration accepts the configured ESX groups or the configured ACE permission. Keep your own group or a valid ACE permission when saving; the server rejects a change that would remove your access.

Club access is separate. In the club editor, DJ access can allow administrators only, a job with a minimum rank, or All players. Allowing all players to use a DJ booth grants no global administration or playlist-management rights. DJ and FOH control also require the correct nearby interaction and routing bucket; access alone does not provide remote control.

Music folder and delivery

Open Settings → Music & Playlists → Library & Queues for these global values.

SettingDefaultAccepted valueEffect
MusicDirectory'config/music'Resource-relative folder or @resource/folder, at most 240 charactersChooses the library scanned on the server. A leading @ selects another resource.
MusicStreamingEnabledfalseBooleanSelects the prepared HTTPS Opus library instead of resource-file MP3 playback; enabling requires confirmation in the editor.
MusicStreamingBaseUrl''HTTPS folder URL, at most 300 characters; may be empty while streaming is offPublic base URL used to construct delivery URLs for the prepared Opus assets.
MaxQueue301–100, whole numberTracks allowed in each deck queue. A mobile boombox queue also uses this limit, capped at 30.
MaxPlaylists501–200, whole numberMaximum saved playlists.
MaxPlaylistTracks1001–200, whole numberMaximum tracks in one playlist.
MaxTrackSeconds7200 s60–14,400 s, whole numberMaximum playback duration used for deck duration/reporting and queue advancement; also bounds boombox playback. The default is two hours.

The default MusicDirectory = 'config/music' uses the music folder inside sky_dj. In SQL mode, change Music & Playlists → Library & Queues → Music folder. An alternative such as @sky_dj_music/music selects a folder in another started resource on the same server. Use forward slashes and a resource-relative folder, not an absolute operating-system path.

Resource names use letters, digits, _ and - and are at most 64 characters. Each folder segment starts with a letter, digit, _ or -; subsequent characters can also include spaces and periods. Traversal (..), duplicate slashes, control characters and absolute paths are rejected. The catalog scans the selected folder rather than recursive subfolders. Keeping a music folder in another resource still requires that resource to be started and configured for the chosen delivery mode.

DeliverySettings and preparation
Resource MP3s, defaultLeave MusicStreamingEnabled = false. The owning resource must publish the MP3s in its manifest's files entries. Restart that resource after adding or replacing files.
Optional HTTPS Opus streamingPrepare the library with the supplied offline FFmpeg tool, configure a valid MusicStreamingBaseUrl, then enable MusicStreamingEnabled. The host needs HTTPS, CORS and byte-range support.

With the default folder selection, HTTPS mode uses the private config/music-stream export produced by the preparation tool. Files can remain on the same server machine, but a working HTTPS host is still required. Node.js and FFmpeg are preparation tools for this optional delivery mode, not dependencies of normal resource MP3 playback.

Use a folder URL such as https://audio.example.com/music/, without credentials, query parameters or a fragment. A valid explicit port is supported. Saved URLs are normalized with a trailing slash; track URLs come from the server's prepared catalog. Selecting a folder or URL does not install a web server or convert the library for you. Follow Installation for music preparation and publishing.

Only enable HTTPS Opus streaming if you know what you are doing. It requires correct certificates, webserver file access and CORS. Enabling it requires an explicit confirmation in the editor; invalid hosting can make music inaudible or expose unintended files. The switch does not remove resource downloads: audio still published in a client manifest is downloaded when players connect. Keep the streamed library outside client files entries and streamed asset folders, and back up originals before moving published copies. Follow the advanced setup warning in Installation.

Keep the same track filenames when moving a library so saved playlist references remain valid. See Mixer and audio for the club playback workflow. The mobile boombox has separate YouTube and Spotify pages.

Music Sync reference

Global Config.MusicSync settings are edited under Settings → Music synchronization. The tabs are Source, Channels, Response, Quiet and Detection. The paths below are written in full so they can also be found in config/config.lua.

The global enable switch controls normal clubs. The fixed festival has separate FOH → Music Sync enable, mode and channel controls. Its analysis also uses shared detection/response values, so global sensitivity changes can affect a festival show that has FOH synchronization enabled. Use the FOH controls for festival participation and overrides.

Source and sensitivity

SettingDefaultAccepted valueEffect and tuning
MusicSync.enabledfalseBooleanEnables normal-club music response. Off preserves manual presets. At least one channel must be selected for a response.
MusicSync.mode'bass''bass', 'melody', 'full'; legacy 'beat' and 'beat_bass' remain readableBass emphasizes low-frequency pulses, melody follows smoother melodic energy, and full combines both. The editor offers the three current modes and displays old beat modes as Bass.
MusicSync.deck'mix''mix', 'A' or 'B'Chooses the audible crossfade mix or one deck. A paused or unavailable selected deck supplies no fresh signal.
MusicSync.sensitivity1.00.25–3Overall onset/BPM sensitivity. Higher values accept weaker spectral attacks; excessive sensitivity can accept unwanted transients.
MusicSync.bassSensitivity1.00.25–3Low-band response and kick detection sensitivity. Raise gradually if genuine kicks barely react.
MusicSync.melodySensitivity1.00.25–3Melodic envelope strength. Raise for quiet melodic material, lower if its response stays saturated.
MusicSync.tempoLocktrueBooleanSmooths updates to a confident detected tempo rather than following each new estimate immediately.

Pulse timing and show response

The depth values are stored as 0–1 fractions and shown as 0–100% in the editor. They blend response with the active fixture/preset; they do not replace every fixture's own settings.

SettingDefaultAccepted rangeEffect and tuning
MusicSync.attackMs30 ms10–300 msRise time of the analyzed energy envelopes. Lower values respond more sharply; higher values soften the onset.
MusicSync.releaseMs350 ms80–2500 msEnvelope and pulse decay. Higher values leave longer tails; reduce if consecutive beats blur together.
MusicSync.holdMs120 ms40–1000 msHolds the beat pulse before decay. It is not a manual flame/CO₂ burst-duration setting.
MusicSync.intensityDepth0.700–1Brightness modulation depth. At zero the fixture keeps its base intensity; higher values give the music more control.
MusicSync.movementDepth0.700–1Amount of music-driven movement timing. Lower values retain more of the preset's normal movement.
MusicSync.colorDepth0.300–1Amount of music-driven colour variation. Zero retains the base colour response.
MusicSync.strobeDepth1.00–1Strength of beat-driven strobe response. Zero retains the fixture's normal strobe clock; switch the device off when no strobe is wanted.
MusicSync.smoothingMs150 ms30–1500 msSmooths the resulting movement, colour and brightness response. Increase for gentler transitions; decrease for a tighter response.

Quiet sections

SettingDefaultAccepted rangeEffect and tuning
MusicSync.quietThreshold0.080.01–0.5Energy threshold for quiet-section behavior. Higher values classify more material as quiet.
MusicSync.quietIntensity0.120–1Quiet-section brightness response target, blended through intensityDepth; this is not a master-volume control.
MusicSync.quietSpeed0.200–1Quiet-section movement target. Lower values produce slower motion.

Detection and frequency bands

SettingDefaultAccepted rangeEffect and tuning
MusicSync.noiseFloor0.0120.001–0.15Signal removed before analysis. Raise to ignore low-level noise; setting it too high can discard real quiet material.
MusicSync.minBpm45 BPM30–480 BPMLower bound of tempo detection.
MusicSync.maxBpm400 BPM30–480 BPMUpper bound of tempo detection and minimum separation of detected kicks.
MusicSync.fallbackBpm128 BPM30–480 BPM, within the chosen tempo windowMotion reference when the detected tempo is unavailable or insufficiently confident. It does not manufacture confirmed beats.
MusicSync.bassLowHz30 Hz20–500 HzLower edge of the analyzed bass band.
MusicSync.bassHighHz200 Hz20–500 HzUpper edge of the bass band. Narrowing the band can separate kicks from higher content.
MusicSync.melodyLowHz250 Hz100–12,000 HzLower edge of the analyzed melodic band.
MusicSync.melodyHighHz4000 Hz100–12,000 HzUpper edge of the melodic band.

minBpm must be strictly below maxBpm, and fallbackBpm must lie between them. Each band's lower frequency must be strictly below its upper frequency. These relationships are checked in addition to the individual ranges.

Channel switches

Every channel below defaults to true and accepts a Boolean. They select which existing effect families follow synchronization; they do not place props or enable a disabled device.

SettingEffect family
MusicSync.channels.lasersLaser response (L)
MusicSync.channels.strobesStrobe response (S)
MusicSync.channels.facadeStage illumination (W)
MusicSync.channels.towersTower illumination (T)
MusicSync.channels.co2CO₂/cryo jets (C)
MusicSync.channels.smokeGround-fog/haze response (R) for supported ordinary-club devices
MusicSync.channels.fireFlames (F), triggered by strong bass peaks rather than continuous loudness

Tune with an assigned MP3 playing on the selected deck. Start with one visible channel and the defaults. If the show barely reacts, check deck playback, the global or FOH enable switch and device participation first. Then adjust the relevant sensitivity in small steps. For unwanted activity during quiet passages, tune noiseFloor and quietThreshold before raising every response depth. Change timing separately from detection so it is clear which value helped. See Lights and effects for manual shots and festival-specific behavior.

Boombox settings

Open Settings → Boombox. Boombox volume and radius have independent ceilings from the club system.

SettingDefaultAccepted valueEffect
BoomboxEnabledtrueBooleanAllows mobile devices. Disabling stores active devices and silences their playback; owners retain item-recovery access.
BoomboxRequireItemfalseBooleanRequires an inventory item for placement when enabled. With false, the command places without inventory calls.
BoomboxItem'sky_boombox'1–60 characters: letters, digits, _ or -Usable-item name registered through Sky Base. Existing claims keep their original item name and metadata.
BoomboxCommand'boombox'1–60 characters: letters, digits, _ or -Placement/open/reclaim command, without a leading slash.
BoomboxMaxDevices321–64, whole numberTotal deployed and recoverable devices. Each owner still has at most one.
BoomboxMaxVolume0.70.05–1.0Independent mobile volume ceiling, shown as 5–100% in the editor.
BoomboxMaxRange25 m3–50 mFixed audible radius for all boomboxes, including restored devices. Players have no per-device range adjustment.
BoomboxMaxAudible21–4, whole numberMaximum nearest audible, playing boomboxes each client renders as audio.
BoomboxCarrytrueBooleanAllows owners to carry and put down their device.
BoomboxDuitrueBooleanCompatibility name for allowing the native prop display. This no longer creates a browser/DUI and does not turn new displays on.
BoomboxDuiDistance8 m2–15 mMaximum native display visibility distance; at most one nearest display is drawn per client.

BoomboxDui and BoomboxDuiDistance remain in saved/global configuration for compatibility. They have no controls in the current editor, and the player panel has no display selector. Unrelated settings saves preserve them. Use the documented file mode when intentionally managing these file values. New devices start with display mode off.

Keep the fixed radius appropriate for a portable speaker. Raising BoomboxMaxAudible permits more overlapping online players on each client; it does not improve the sound of one device. See Boombox for placement-first behavior, item definitions, shared access and restart recovery.

Festival grounds and fences

SettingDefaultAccepted valueEffect
FestivalGroundEnabledtrueBooleanLoads the supplied fixed festival grounds and enables its booth.
FestivalFencesEnabledtrueBooleanLoads the supplied fence perimeter when festival grounds are enabled.

FestivalGroundEnabled = true enables the fixed Vespucci Beach venue and its DJ booth. It can be changed under Settings → Festival grounds. This switch controls the supplied festival; it is separate from the custom clubs you create.

FestivalFencesEnabled = true controls the festival perimeter fences independently. Fences require the festival grounds to be enabled. Set it to false to keep the festival without its supplied fence perimeter.

The festival includes a large map, speakers and show effects. Enabling it can increase client resmon time, especially near the venue with effects active. There is no guaranteed millisecond value: compare enabled and disabled operation on your server with representative clients, graphics settings and player activity.

MusicSync.enabled is false by default and controls normal club synchronization. The fixed festival has its own FOH → Music Sync controls, also enabled explicitly; save there to return manually overridden festival channels to automatic control. Manual controls remain available without music. Devices saved as disabled do not follow presets or Music Sync. The FOH panel shows their counts and offers separate actions to enable the flame or CO₂ devices. See Lights and effects for show operation.

Retained media timeout

SettingDefaultAccepted rangeScope
MediaTimeout10000 ms2000–30,000 msRetained media-resolution request timeout in the UI/client request layer.

This setting has no current global-editor field. The current club library resolves local catalog entries rather than online media requests, so changing it does not extend MP3 loading timeouts. Mobile YouTube metadata has its own fixed five-second lookup timeout. Keep the default; the current UI has no online resolution workflow that needs tuning here.

Advanced audio file

config/audio.lua defines SkyDjAudioConfig, separately from Config and SQL global settings. Edit the file and restart to apply it. These values have no configurator range validation; use the shipped values as the baseline.

SettingDefaultUnit/typeEffect
SkyDjAudioConfig.RefreshTime300MillisecondsEmbedded engine player-position update interval and browser distance/volume refresh timing. Lower intervals increase update work; this is separate from Music Sync analysis and server synchronization.
SkyDjAudioConfig.distanceBeforeUpdatingPos40MetresExtra proximity margin around a spatial sound's range for position updates and range management. It does not enlarge the sound's configured audible radius.
SkyDjAudioConfig.interact_sound_enablefalseBooleanEnables the optional InteractSound compatibility handlers. Leave it off unless another resource needs that compatibility API.
SkyDjAudioConfig.interact_sound_file'ogg'File-extension stringExtension appended to compatibility sound basenames. Supply and publish matching sound files when using the compatibility handlers.

Avoid enabling two resources that both handle the same InteractSound events. The normal DJ/boombox system uses the embedded engine without requiring this emulator or a separate sound resource.

Sample catalog and per-club soundboard

config/soundboard.lua defines the file-owned ClubSamples catalog. Every entry has a stable id, a label, a sample file and its duration in seconds. Preserve IDs and the 16-entry layout when replacing a sound so saved club pad assignments keep their meaning. The runtime indexes the catalog by its position, matching the shipped IDs 1–16.

IDLabelFileDuration (s)
1RISEphaserUp1.ogg0.496327
2FALLphaserDown1.ogg0.470204
3ZAPzap1.ogg1.018776
4LASERlaser1.ogg1.100363
5POWERpowerUp1.ogg1.201633
6JUMPphaseJump1.ogg0.470204
7LOWlowDown.ogg0.783673
8HIGHhighUp.ogg0.548571
9TRIPLEthreeTone1.ogg0.827052
10SPACEspaceTrash1.ogg1.451315
11DOUBLEzapTwoTone.ogg1.306122
12SWEEPphaserUp3.ogg0.522449
13BELLimpactBell_heavy_000.ogg1.480181
14METALimpactMetal_heavy_000.ogg0.167664
15PUNCHimpactPunch_heavy_000.ogg0.649025
16PLATEimpactPlate_heavy_000.ogg0.488662

The file is resolved under source/html/samples/. A replacement must exist there and be included in the resource manifest. Keep duration aligned with the actual recording because the server uses it for sample lifetime and cleanup. Changing this Lua catalog requires a restart; adding runtime audio files also requires publishing those assets correctly.

The mixer's Soundboard & mixer panel manages separate per-club settings saved in SQL:

ControlDefaultAccepted valueEffect
Pad assignmentsIDs 1–16 in orderExactly 16 selections, each ID 1–16Selects a catalog sample for each A/B pad; right-click a pad to open its assignment.
Sample volume0.65 / 65%0–1Sample playback level for this club.
Lower music during samplesfalseBooleanEnables music ducking while samples play.
Crossfader curve'smooth''smooth', 'linear' or 'cut'Chooses the club mixer's crossfade behavior.

Save with Save for this club. Pads use 1–8 and Q W E R T Z U I while the mixer is active; the loop switch repeats a pad, and sample cut cancels active samples. At most four samples can play simultaneously, and loops stop after 30 seconds. These playback limits are fixed behavior, not additional Config settings.

Language and dependencies

Sky DJ follows Sky.Config.locale from sky_base, with English fallback. Its 19 JSON dictionaries are in config/locales/. There is no separate Config.Locale setting in Sky DJ.

The resource requires ESX, OneSync, ox_lib and sky_base. SQL uses the provider configured by sky_base; do not add a second audio resource or assume another framework is supported because an integration uses a Sky facade. A configured target provider is optional; the standard interaction uses the Sky TextUI/help adapter when target is disabled. See Installation for startup order and Troubleshooting for access or configuration errors.