BeatKhana Development

Dynamic Overlay placeholder reference

Every template replacement, its output format, binding and source.

How replacement works

Text nodes replace every {{key}} when rendered. Whitespace inside braces is allowed. Values use the node's fixed or inherited team/player/map/action binding. Index fields are zero-based; number fields are one-based. Scores include thousands separators, percentages are numeric text without a % unless explicitly stated, booleans become true/false, and unavailable values normally become an empty string. Add % in the template where desired.

Live score values come from TournamentAssistant or synchronized replay-compositor score timelines. The native compositor's authoritative playback time drives song progress. song… result fields use persisted official BeatKhana match results; Lightshow values come from the active showcase; donation values come from the public donation socket.

Tournament

PlaceholderReplacement and source
{{tournamentName}}Tournament public name; fallback BeatKhana Invitational.
{{tournamentImage}}Tournament image URL; fallback cover when absent.
{{tournamentBackground}}Tournament banner URL.
{{tournamentStatus}}Tournament status, underscores changed to spaces and uppercased.
{{tournamentDescription}}Public tournament description.
{{tournamentWebsite}}Public tournament website link.
{{tournamentTwitch}}Tournament Twitch channel name.
{{tournamentStartDate}}Stored public start-date value.
{{tournamentEndDate}}Stored public end-date value.

Match, bracket and staff

PlaceholderReplacement and source
{{matchType}}Selected match type/round; fallback Grand Finals.
{{matchNumber}}Selected match number; fallback 1.
{{matchStatus}}Match status, normalized and uppercased.
{{matchBestOf}}Series length calculated as maxScore × 2 − 1.
{{matchCoordinators}}Comma-separated assigned coordinator names.
{{matchReferees}}Comma-separated assigned referee names.
{{matchCasters}}Comma-separated assigned caster names.
{{matchStreamHosts}}Comma-separated assigned stream-host names.
{{divisionName}}Match bracket division name; fallback node division then Open Division.
{{bracketName}}Match bracket name; fallback node bracket then Playoffs.
{{bracketMatchCount}}Number of matches in the selected bracket.
{{previousMatchType}}Previous bracket match type.
{{previousMatchNumber}}Previous bracket match number.
{{previousMatchStatus}}Previous match status, normalized and uppercased.
{{previousMatchTeams}}Previous match team names joined with vs.
{{previousMatchScore}}Previous official team scores formatted A — B.
{{nextMatchType}}Next bracket match type.
{{nextMatchNumber}}Next bracket match number.
{{nextMatchStatus}}Next match status, normalized and uppercased.
{{nextMatchTeams}}Next match team names joined with vs.
{{nextMatchScheduledTime}}Stored scheduled-time value of the next match.

Bound team and live aggregate

PlaceholderReplacement and source
{{teamName}}Bound BeatKhana team name; preview fallback Country N.
{{teamNameOpponent}}Opposing team name (team 1 for bound team 0, otherwise team 0).
{{teamImage}}Bound team image URL or fallback cover.
{{teamSeed}}Team seed, otherwise one-based bound-team position.
{{teamIndex}}Zero-based bound team index.
{{teamPlayerCount}}Full registered roster size.
{{teamActivePlayerCount}}Current active/TA player-slot count.
{{teamPoints}}Current official series/map points for the team.
{{teamReplays}}Remaining team replays from link/match results.
{{teamReplaysUsed}}Count of distinct replay calls by this team.
{{teamReplaysTotal}}Remaining plus used replay calls.
{{teamScore}}Sum of current live player raw scores.
{{teamModifiedScore}}Sum of current live modifier-adjusted scores.
{{teamMaxScore}}Sum of current live maximum scores.
{{teamAccuracy}}Current team aggregate accuracy as percent-number text.
{{teamAccuracyDiff}}Bound-team accuracy minus opponent accuracy, signed percent-number text.
{{teamMisses}}Sum of current live missed notes.
{{teamBadCuts}}Sum of current live bad cuts.
{{teamBombs}}Sum of current live bomb hits.
{{teamWalls}}Sum of current live wall hits.
{{teamCombo}}Sum of current live combos.
{{teamMaxCombo}}Sum of current live maximum combos.
{{teamErrorsTotal}}Misses + bad cuts + bomb hits + wall hits across the team.

Bound player and live telemetry

PlaceholderReplacement and source
{{playerName}}Preferred name, username or TA name; preview fallback Player N.
{{playerIndex}}Zero-based player index inside the bound team.
{{playerNumber}}One-based player number.
{{playerAvatar}}BeatKhana avatar, then TA Discord avatar, then fallback cover URL.
{{playerCountry}}BeatLeader country code, then ScoreSaber code, fallback XX.
{{playerFlag}}Flag emoji derived from the resolved player country code.
{{playerPronouns}}Stored pronouns; missing/not/given becomes they/them.
{{playerTwitch}}Twitch channel; stored none becomes empty.
{{playerScore}}Current raw score from TA or synchronized replay timeline.
{{playerModifiedScore}}Modifier-adjusted score, falling back to raw score.
{{playerMaxScore}}Current attainable/maximum score.
{{playerAccuracy}}Score/max-score accuracy as percent-number text.
{{playerMisses}}Current missed-note count.
{{playerBadCuts}}Current bad-cut count.
{{playerBombs}}Current bomb-hit count.
{{playerWalls}}Current wall-hit count.
{{playerErrorsTotal}}Misses + bad cuts + bombs + walls.
{{playerCombo}}Current combo.
{{playerMaxCombo}}Maximum combo reached.
{{playerHealth}}Player health as percent-number text.

Bound song/map identity and state

PlaceholderReplacement and source
{{songName}}Resolved map song name.
{{songIndex}}Zero-based pool/repeater map index.
{{songNumber}}One-based map number.
{{songArtist}}Song artist.
{{songMapper}}Beatmap author.
{{songDifficulty}}Display difficulty.
{{songCharacteristic}}Characteristic such as Standard/Lawless.
{{songCover}}Cover URL.
{{songDuration}}Formatted duration string.
{{songDurationSeconds}}Numeric duration in seconds.
{{songProgress}}Authoritative playback progress as percent-number text with one decimal.
{{songBpm}}BPM, at most two decimals.
{{songNjs}}Note jump speed, at most two decimals.
{{songNps}}Notes per second, at most two decimals.
{{songKey}}Uppercase BeatSaver key.
{{songHash}}Normalized level hash.
{{songFlair}}Tournament-defined map flair name.
{{songFlairIcon}}Tournament-defined flair icon value.
{{songFlairColor}}Tournament-defined flair color.
{{songState}}Derived available, picked, next, replay, played, banned, tiebreaker or current state.
{{songPlayed}}true when an official result exists, otherwise false.
{{songCurrent}}true when this is the current TA/compositor map.
{{songNext}}true when this is the next playable/replay-pending map.

Persisted song results and replays

PlaceholderReplacement and source
{{songWinnerName}}Official winning team name.
{{songWinnerImage}}Official winning team image URL.
{{songWinnerTeamIndex}}Winner's zero-based team index.
{{songWinningScore}}Highest official team score.
{{songScoreDifference}}Bound team score minus strongest opponent score.
{{songTeamScore}}Bound team's official total across submitted player rows.
{{songTeamAccuracy}}Bound team's average official accuracy as percent-number text.
{{songTeamMisses}}Bound team's official missed-note total.
{{songTeamBadCuts}}Bound team's official bad-cut total.
{{songTeamPlayerCount}}Number of official player rows for the bound team.
{{songOpponentScore}}Strongest opponent's official total.
{{songPlayerScore}}Bound player's official persisted score. Templates using songPlayer… can address persisted player rows even without a live TA roster.
{{songPlayerAccuracy}}Bound persisted player's official accuracy.
{{songPlayerMisses}}Bound persisted player's official misses.
{{songPlayerBadCuts}}Bound persisted player's official bad cuts.
{{songReplayCount}}Number of recorded replay attempts for this map.
{{songReplayPending}}true while a requested replay still needs completion.
{{songLastReplayRound}}Latest replay round number.
{{songReplayCallerTeamName}}Latest replay-calling team's name.
{{songReplayCallerTeamImage}}Latest replay-calling team's image URL.
{{songScoreToBeat}}Score retained from the prior official attempt.
{{songScoreToBeatAccuracy}}Its accuracy as percent-number text, without %.
{{songAccuracyToBeat}}The same target accuracy with % already appended.

Lightshow Showcase

PlaceholderReplacement and source
{{previewPlayingSong}}Active showcase song name; fallback No Song Playing....
{{previewPlayingSongArtist}}Active showcase artist.
{{previewPlayingSongMapper}}Active showcase mapper.
{{previewPlayingSongCover}}Active showcase cover URL.
{{previewPlayingSongDifficulty}}Active showcase difficulty label/value.
{{previewPlayingSongCharacteristic}}Active showcase characteristic.
{{previewPlayingSongKey}}Active showcase BeatSaver key.
{{previewPlayingSongHash}}Active showcase map hash.

Pick/ban action

PlaceholderReplacement and source
{{actionType}}Normalized current/inherited action type.
{{actionNumber}}Stored flow order, otherwise one-based action index.
{{actionTeamName}}Actioning team/player display name.
{{actionerName}}Alias of the resolved actioning identity name.
{{actionerAvatar}}Resolved actioning identity image URL or fallback cover.

Donations

PlaceholderReplacement and source
{{donationTotal}}Public donation total, formatted to two decimals.
{{donationGoal}}Public donation goal, formatted to two decimals.
{{donationPercent}}Total/goal percent-number text; 0.00 without a goal.
{{donationCurrency}}Public donation/tournament currency.
{{donationLabel}}Public donation campaign label.

Advanced dotted values

If a key is not in the tables, the renderer safely traverses these roots: overlay, tournament, match, team, teamLink, player, memberLink, taUser, score, map, mapData, mapResult, action, donations and runtime. For example, {{match.scheduledTime}} reads the selected match field and {{score.maxScore}} reads the bound live score. Arrays become comma-separated text; objects become JSON. __proto__, prototype and constructor traversal is blocked.

On this page