Troubleshooting
On this page4
Reading the console at start
A healthy start looks like this:
[5code-recognition] Schema ensured (mysql 8.0.39).
[5code-recognition] Integrations: framework=qbx inventory=ox_inventory voice=pma-voice appearance=illenium-appearance tattoos=illenium-appearance death=qbx_medical police=qbx_police mdt=none evidence=none target=none textui=native hud=jg-hud screenshot=builtin
[5code-recognition] Full scan time with current settings: 90 s.
[5code-recognition] Resource started successfully (v1.0.0).
[5code-recognition] Up to date (1.0.0).The last line arrives about eight seconds after the others, and is silently skipped if the update check cannot reach GitHub — its absence is not a fault.
Read the Integrations line carefully. It is the fastest way to spot that a system you meant to use was not detected.
Every line the script can print
Errors
None of our lines appear at all, and FXServer complains about /onesync.
OneSync is off. The resource declares it as a hard dependency and is not started.
set onesync onWarnings
[5code-recognition] Database mariadb 10.3.39 is older than the tested minimum (MySQL 8.0 / MariaDB 10.4). Continuing, untested.The script runs, but your database version is older than the minimum we support. Upgrade to MySQL 8.0+ or MariaDB 10.4+ when you can. If something database-shaped misbehaves, this line is the first suspect.
[5code-recognition] The secret salt is stored in the database. Set recognition_secret in server.cfg (see docs: Security).(This section is the "Security" page the console line points to.)
No recognition_secret convar was set, so one was generated and stored in your
database. It works, but anyone with database access can read it. The best place
for it is server.cfg, set before the first start:
set recognition_secret "[YOUR LONG RANDOM TEXT]"Set the secret once and never change it: the voices players learned, voiceprints, tattoo codes on papers and the proof log all depend on it, so a changed secret is refused at start (see the next line).
If your server already ran with the stored secret:
- Fresh install, no real player data yet: add the convar above, set
ServerConfig.AllowSaltChange = truefor one restart, then set it back tofalse. - Live server: you may simply keep the stored secret. Everything works; this line just keeps showing at start.
[5code-recognition] Running with the previously stored secret salt. Restore recognition_secret, or set ServerConfig.AllowSaltChange = true once to accept the new value.The secret differs from the one the server used before, so the script kept the
old one. Put the old recognition_secret back. Only if you really want a new
secret: set ServerConfig.AllowSaltChange = true for one restart, then set it
back to false. Accepting a new secret resets learned voices, voiceprints and
tattoo codes.
[5code-recognition] Missing item definitions: voice_changer, hidden_camera. See docs: Getting Started > Items.Those items do not exist in your inventory's item list. The script hands items out; it does not create them. Add the definitions from the Items page and restart your inventory.
[5code-recognition] Voice detection is low-trust on this server (provider: enhanced). Voice results are flagged for admins.Your voice system does not expose reliable "is this person talking" information. Voice still works, but results are flagged in the staff panel so a dispute can be judged with that in mind. Not a fault — see Known Limitations.
[5code-recognition] MDT auto-detect skips lb-tablet (version 1.5.3) for now: it does not export CreateMDTReport (yet), which statements and camera reports need. It is checked again, so an export that turns up later is used without a restart.That MDT runs, but this build has no export for statements or camera reports, so
they stay on paper. Leave Config.MDTSystem = 'auto' — you do not need 'none'
to work around it. The script looks again a few times in the first minute and then
whenever a statement or camera report is sent, so an MDT that creates its exports a
moment after it starts is picked up on its own, with one more line:
[5code-recognition] MDT lb-tablet (version <its version>) has its export(s) now, so statements and camera reports go to it.If that line never comes, the MDT build really lacks the export: update the MDT and restart it. See Police, MDT & Evidence.
[5code-recognition] db.prune took 6.20 ms (over 5.0 ms).The database clean-up (it removes expired memories, scans and papers) held the
server thread for longer than ServerConfig.Perf.TickWarnMs in one stretch
without a pause. The time it spends waiting for the database is not counted. Once
in a while this is harmless. If it shows on every run, send the line together with
your recognition:selftest output.
[5code-recognition] Ignored 1 stored setting override (Config.Foo.Bar): unknown or invalid. The config.lua value is used.A staff member changed that setting in game, and the setting no longer exists or no longer accepts that value — usually after an update changed the config. The file value is being used. Nothing to do; if the setting still exists under a new name, set it again in the panel.
[5code-recognition] Config.<Selector> = '<x>' but <x> is not started.
[5code-recognition] Config.TargetSystem = '<x>' but <x> is not started; using 'none'.You pinned an integration to a resource that is not running. <Selector> is any
of the *System keys and Config.Framework and Config.MulticharSystem
(that last one reads …but that resource is not started.).
What happens next depends on the area:
| Area | What the script does |
|---|---|
| framework, inventory, voice, appearance, death, police, MDT, evidence, HUD, nametag, weather sync, screenshot | Keeps your choice rather than silently falling back, so that area does nothing. |
| target | Falls back to 'none' and keeps working. |
| text UI, emotes | Falls back to 'native' and keeps working. |
| progress | Falls back to 'nui' and keeps working. |
Either start that resource, fix the spelling of its folder name, or set the
selector back to 'auto'.
Information
[5code-recognition] standalone: items are kept by the script (use /recognition:use).No inventory was detected. The five items live in the script's own store.
Players use /recognition:items and /recognition:use <item>. Normal on a
standalone server; if you do run an inventory, it was not detected — check
Config.InventorySystem and the start order in server.cfg.
[5code-recognition] Freecam check needs a newer server artifact (GetPlayerFocusPos); skipped.One optional check needs a newer FXServer artifact. Everything else runs. Update your artifact when convenient.
[5code-recognition] Discord log webhooks: none configured (optional).No Discord channel has a URL, so nothing is sent to Discord. Discord logging is
optional: this one line is all a server without it ever gets. When some channels
do have a URL, the line lists those instead
(Discord log webhooks on: admin, proofs.) and says nothing about the empty
ones. To enable a channel:
set recognition_webhook_proofs "[YOUR WEBHOOK URL]"[5code-recognition] Webhook 'proofs' was ignored (it is an http:// URL), so it is off. Set an https:// URL in config_server.lua or its convar.A value was set for that channel, but it is not a usable URL: a typo, an
http:// URL or a leftover placeholder. The brackets say which
(it is an http:// URL, it does not start with https://, it is not a URL,
the value is not text); the URL itself is never printed. When the default
channel has a URL, the line says so it posts to the default webhook instead.
Fix the value so it starts with https:// and restart.
[5code-recognition] 42 new clothing/prop items found (mp_f_freemode_01: 12, mp_m_freemode_01: 30). Run Auto-scan from the admin panel to classify them.A clothing pack was installed, or the game updated. Until those items are classified, an unknown mask counts as covering the face, an unknown top as long sleeves, a hat or helmet like a cap, and an unknown gloves-slot item leaves the hands bare. Open the admin panel → Clothing → Run Auto-scan. This line is printed only when the counts changed.
[5code-recognition] Admin settings overrides active: 7 (see the admin panel > Settings, or reset them to the file defaults).Seven settings are different from config.lua because a staff member changed
them in game. Nothing is printed when there are none. The Changed filter on
the admin panel's Settings page shows exactly which.
[5code-recognition] Update available: 1.0.0 -> 1.0.1A newer version is published. See Updating.
Neither this line nor Up to date (1.0.0). appears until about eight seconds
after the rest of the boot block, and neither appears at all when the check
cannot reach GitHub — a blocked host, a rate limit or an unreadable
versions.json is a debug line and nothing else. A missing update line is not
a fault and never means the resource failed to start; the Resource started successfully line above it is the one that says that.
Common problems
F3 does nothing, or nobody gets an arrow
- Check
Config.StartMode. The F3 menu only exists in'menu'mode (the default). In'prompt'mode the arrow and Recognize [E] appear by themselves; in'target'mode the option is in your target script's menu. - Check the key: a player may have rebound it in Settings → Key Bindings → FiveM → Recognition: open the menu.
- The menu uses the UP / DOWN arrows and Enter only. The number keys do nothing on purpose — on most servers they are the inventory hotbar.
- You have to face them — your body within 90° of them — within 5 metres, on the same floor. They may look anywhere.
- Both of you must be on foot (
Config.Scan.OnFootOnly). - The menu says "Nobody in front of you" when nobody is close enough, and "Nobody in clear view - step to where you can see them" when a wall is between you.
- A client hook may be blocking it. Check
Hooks.IsPlayerBusyandHooks.CanShowPromptinbridge/hooks.lua.
The hidden camera gave no paper, or there are no camera recordings
Camera papers are not handed out by themselves. The recording waits in F3 → Camera recordings (last 24 h) and is printed from there, once, with a 3-second Printing....
Printing needs the F3 menu, which only exists with Config.StartMode = 'menu'.
With 'prompt' or 'target' there is no way to print in this version. See
Devices & Reports.
| What the player sees | Why |
|---|---|
| "No recordings to print (last 24 h)" | No camera look reached 50 % in the last 24 hours, or each one was already printed |
| "Recording now · 25% (needs 50%)" | The look is still running and the camera has seen too little. It becomes printable at 50 % — the HUD shows REC with the same %, green from 50 % |
| "(camera on too short)" | The camera was off for too much of this look. Keep it on |
| "(printed recently)" | A recording of this person was already kept or printed recently (Config.HiddenCamera.ReportPairCooldownMinutes, 30 min) |
| "You need your hidden camera with you to print." | The camera must be in the inventory to print |
| "The camera saw only 30% - not enough for a recording (needs 50%)." | The look ended below 50 %, so no recording was kept |
The scan never fills
| Bar | Check |
|---|---|
| Voice | Are they actually talking? Are they on a radio or a phone? Is your voice system detected on the Integrations line? |
| Face | Is anything covering it? Are they facing you? |
| Clothing | Can you see them — no wall in the way? (Cars and people never block the view.) |
| Tattoo | Do they have any, on skin you can currently see? |
| All of them | Look at the slow line. Night, rain and fog all take their toll |
"Changes don't apply"
The three usual causes, in order of likelihood:
- You edited the file on a different server or a different folder than the one you are testing on.
- A staff member changed that setting in game, and the override wins over the file. The boot line above tells you how many overrides are active; the Settings page's Changed filter tells you which. Reset to file clears one.
- The setting needs a restart. Command names, table names, item names and a few others are read once at boot. The Settings page marks these After restart.
Wrong framework or inventory detected
Pin it instead of 'auto':
Config.Framework = 'esx' -- or 'qb-core' / 'qbx_core' / 'ox_core' / 'standalone'
Config.InventorySystem = 'ox_inventory'Use the exact resource folder name. If the resource is not running you get the warning above rather than a silent fallback.
Characters get new identities on every login
The framework's character id is not stable, or the multicharacter selector is not linked to our table:
- Qbox — add
{'recognition_identities', 'identifier'}to qbx_core'scharacterDataTables. - 0R Multicharacter v3 — add the same table to
Database.List. - ESX — our tables are created at the first start. Restart the server once
afterwards, or import
sql/install.sqlbefore the first start, soesx_multicharactercan see them.
Nobody forgets anybody after a death
- Check the death= field on the Integrations line. If it says
native, your ambulance script was not detected and the movement fallback is in use. Config.Death.Enabledmust betrue.- A revive always keeps memories. Only a respawn erases them.
Hooks.ShouldProcessDeathmay be returningfalse.- Open Deaths in the admin panel. A death may still show Waiting; Keep memories or Wipe memories decides it by hand.
Admin panel says "no permission"
add_ace group.admin recognition.admin allow
add_principal identifier.license:YOUR_LICENSE_HERE group.adminIf you use child permissions, remember that view is what opens the panel at
all. A txAdmin login only gets the levels in Config.Admin.TxAdminPerms.
The panel refuses to show a pair
By default staff cannot view or edit a pair involving their own character
(Config.Admin.BlockSelfView, Config.Admin.BlockSelfEdit). Use the server
console, or another character.
Everybody is suddenly unrecognizable after a clothing update
New items are unclassified, and an unclassified mask or top counts as hiding (a full face cover, long sleeves). Look for the "new clothing items" line and run Auto-scan. Hats and helmets are the exception and behave like a cap, so a new uniform pack does not black out a whole department.
Papers or devices cannot be handed over
Your inventory cannot store item metadata. Use
/recognition:handover <item> while facing the person.
Nothing reaches Discord
- The URL must start with
https://. - It goes in
config_server.luaor asetconvar, never inconfig.lua. - Look for the "Discord log webhooks" line: a channel missing from its list has no URL. A "Webhook '<channel>' was ignored" warning means the value you set was refused, and says why.
recognition:statusprints the queue length and any channel that disabled itself after repeated failures.
Reporting a problem
Include:
- The output of
recognition:selftestfrom the server console. - The Integrations line from your start-up log.
- Your framework, inventory, voice system and FXServer artifact.
- What you did, what you expected, what happened.