Skip to content

Server Commands and FAQ

unicbm edited this page Jul 14, 2026 · 5 revisions

Playback Commands and FAQ

These commands run in the local CS2 server console after the Playback Bundle is installed. “Playback” distinguishes the local in-game replay component from the CLI and GUI downloads; it is not a hosted service.

The repository's command reference is canonical. This page covers the normal workflow and common failures.

First Run

dtr_config_status
dtr_runtime
dtr_doctor "<manifest.json>"
dtr_go seq "<manifest.json>" 0

dtr_go validates the plan, applies the current settings, and restarts the game round so playback can start from the correct freeze-time anchor.

High-Level Playback

Command Purpose
dtr_go seq "<manifest.json>" [from_source_round] Play the manifest's playable rounds in sequence.
dtr_go round "<manifest.json>" <source_round> Play one source round without advancing.
dtr_go pool "<pool_manifest.json>" [server_round] Choose an economy-matched round from a converted pool.
dtr_stop sequence Stop future sequence and playoff scheduling.
dtr_stop pool Stop future pool selection.
dtr_stop slot <slot> Release one replay slot.
dtr_stop all Stop active replay slots plus future sequence/pool scheduling.
dtr_unload <slot> Release one slot and its loaded replay buffer/presentation lease.

The older dtr_run_manifest and dtr_run_pool forms remain compatibility aliases. Prefer dtr_go for new instructions and scripts.

Built-In Defaults

Area Default Meaning
Identity dtr_replay_identity steam Lease the demo name and SteamID64 through the bundled BotHider provider.
Fidelity dtr_align default Weapons/loadout, projectiles, and left-hand desired writes on; crosshair off.
Match presentation dtr_match off Scoreboard/KDA/MVP/team-score sync off.
Cosmetics dtr_cosmetics off Skins, agents, stickers, charms, and related risky evidence off.
Handoff dtr_handoff death_contact_c4 slot Release one slot when its replay bot dies, kills, or reaches contact; C4 planted releases all active slots.
360-degree perception dtr_handoff_360 on 420 los Enable native replay-time 360 perception; range/LOS configure the compatibility fallback.
Partial replay dtr_partial 1 Allow fewer safe replay bots than manifest players.
Playoff dtr_playoff off Do not continue after the manifest sequence is exhausted.
Voice dtr_voice_auto on Replay a matching .dtv sidecar when available.
Chat dtr_chat_auto on Replay manifest chat events on the recorded timeline.
Native replay POV bc_replay_pov spectated Apply the native first-person replay mask to spectated bots.

These defaults are already suitable for a conservative first run. Crosshair, scoreboard, cosmetics, and playoff require explicit opt-in.

Optional Playoff Continuation

Enable before or during sequence playback:

dtr_playoff on
dtr_go seq "<manifest.json>" 0

After the normal sequence ends, DemoTracer may keep scheduling full-buy opening routes from that manifest. T and CT are selected independently and may come from different source rounds. Player mapping remains strict by SteamID64; if either side cannot form a retained matching roster, that playoff round is skipped.

Because a mixed playoff round has no single truthful source round, it does not replay scoreboard, chat, or voice metadata. Turning playoff off cancels future playoff scheduling but does not interrupt a replay already live.

To make it server-local and persistent, set top-level "playoff": true in demotracer.config.json. The shipped example and built-in default are false.

Fidelity and Presentation Controls

dtr_align status
dtr_align default
dtr_align full
dtr_align handoff_safe
dtr_match off
dtr_cosmetics off
dtr_replay_identity steam
dtr_handoff death_contact_c4 slot

dtr_align default and full currently select the same weapons, projectiles, and left-hand desired settings; both keep crosshair off. Enable crosshair explicitly with dtr_align crosshair on. handoff_safe keeps weapons and projectiles but disables left-hand desired writes so the native bot resumes with the server's normal viewmodel preference. See Fidelity and Handoff before enabling richer presentation.

Diagnostics

Command Use it for
dtr_config_status Effective config source and all major settings.
dtr_runtime Expected/loaded ABI, native capability bits, and runtime version.
dtr_doctor [manifest.json] ABI, map, bot, manifest, BotHider, and optional RayTrace health.
dtr_bots Safe replay candidates and BotHider-managed slots.
dtr_status <slot> Cursor, replay state, handoff, and alignment state for one slot.
bc_status Native BotController status.
bh_status Bundled BotHider runtime status.

Run dtr_doctor "<manifest.json>" before changing settings. It usually separates installation, map, manifest, and slot problems quickly.

Runtime Config File

DemoTracer optionally reads demotracer.config.json beside DemoTracer.dll. Copy the sanitized example, change only the preferences you need, then run:

dtr_config_reload
dtr_config_status

Console commands are temporary overrides; reloading the file restores its values.

FAQ

expected_abi and runtime_abi do not match

Stop the server and install the complete matching Playback Bundle. Do not copy only the CounterStrikeSharp DLL: BotController, BotHider, their gamedata/VDF files, and the managed plugins are one versioned runtime set. v0.6.0 expects native ABI 16 with bundled minor 31 or newer.

The manifest reports a map mismatch

Load the same map recorded by the manifest, then run dtr_doctor again. Routes are map-specific.

There are not enough replay bots

Keep dtr_partial 1 for a partial lineup, add enough strict CS2 bots, and use dtr_bots to inspect eligible slots. DemoTracer never assigns replay control to a real human player.

BotHider identity or presentation is unavailable

Install the full Playback Bundle and run bh_status. Remove separately installed public BotHiderImpl CSS plugins; the bundled DemoTracerBotHider must be the only presentation publisher.

I cannot hear replay voice

Confirm the converted directory contains the matching voice/roundXX.dtv, run dtr_voice_auto status, and check dtr_runtime for voice-send capability. Many demos simply do not contain recorded in-game voice. See Voice and Chat Replay for sidecar and speaker mapping checks.

I cannot see replay chat as a spectator

Confirm dtr_chat_auto on and that the manifest contains rounds[].chat_messages. For local spectator testing, use sv_full_alltalk 1; sv_allchat 1 alone is not sufficient. See Voice and Chat Replay for the complete checklist.

Playback stops too early or too late

Check dtr_handoff and the handoff model. The default uses current contact plus replay-bot death/kill evidence per slot and releases every active replay slot when the C4 is planted.

How do I remove a replay bot whose visible name was replaced?

Use dtr_kick slot <slot> or another exact dtr_kick form. Native bot_kick may still see the bot's underlying CS2 profile name rather than the leased DTR presentation.

Clone this wiki locally