Skip to content
Yakuda edited this page Aug 10, 2026 · 1 revision

Apps

The Apps page holds the four things that write into the chatbox on their own. Each one is a card with a toggle; the 3×3 dots on the left of a card header drag it into another position, and that order is the order the lines appear in.


Personal Status

A rotating line of text you write yourself — a mood, a "BRB", a note about what you are doing. It is the simplest app in the program and the one most people use alone.

How it works

You fill in up to 20 text slots. The app shows slot 1, waits, shows slot 2, and so on, then starts over. A slot left empty is skipped entirely, so the rotation never shows a blank line.

Settings

Setting Default What it does
Active on Whether the app contributes a line at all
Number of texts 1 How many of the 20 slots are in the rotation
Cycle every 10 sec How long each text stays on screen
Style per text normal normal, super or sub — see below
Template 1 Which of the ten text sets is active

Superscript and subscript

Every slot has its own style. super and sub map the text onto the Unicode small-letter blocks, so it renders smaller in the chatbox without any font support:

normal   Hello there
super    ᴴᵉˡˡᵒ ᵗʰᵉʳᵉ
sub      Hₑₗₗₒ ₜₕₑᵣₑ

Not every character exists in those blocks. Anything without a mapping is passed through unchanged — the line never breaks, it just mixes sizes. Uppercase in sub is particularly sparse; lowercase gives the better result.

Templates

Ten independent sets of texts, each with its own 20 slots, its own styles and its own "number of texts". Switching template swaps all of it at once.

The intended use is context: a set for streaming, a set for hanging out, a set for events. You are not limited to that — a template you never put on rotation still works as a text library, because other parts of the app can reach into it by number:

{text}            the rotating text of the ACTIVE template
{text_3}          slot 3 of the active template, no rotation
{text_t2}         the rotating text of template 2
{text_t2_5}       slot 5 of template 2

So an All-in-one string can pull one fixed sentence out of template 7 without ever switching to it.


Hardware

Live system values: GPU, CPU, memory, temperatures, power draw and frames per second.

Where the numbers come from

Platform Source
Linux, AMD /sys/class/drm/*/device/hwmon and gpu_busy_percent
Linux, NVIDIA nvidia-smi
Linux, CPU /proc/stat, /proc/meminfo, hwmon
Linux, CPU watts Intel RAPL, or zenergy / k10temp on Zen 4/5
Windows Performance counters (PDH) and Win32 APIs
FPS MangoHud's log file (Linux), opt-in

Nothing is polled that is not switched on. A card with only the CPU values enabled never touches the GPU sysfs tree at all.

Display options

Option Default What it shows
GPU name on Card name, e.g. RX 9070 XT
GPU custom name off Replace the detected name with your own
GPU load on Usage in percent
GPU temp on Temperature in °C
GPU watts off Power draw
VRAM used on e.g. 9.1/16G
VRAM percent off Percentage instead of absolute
CPU name on Model name
CPU custom name off Replace the detected name
CPU load on Usage in percent
CPU temp on Temperature in °C
CPU watts off Package power draw
RAM used on e.g. 18/32G
RAM percent off Percentage instead of absolute
RAM type (empty) Free text, e.g. DDR5 — not detected
Flame icon off 🔥 above a temperature threshold
Poll interval 2 sec How often the values are refreshed
FPS via MangoHud off Reads MangoHud's log directory

The two watt options are off on purpose. The chatbox is 144 characters; switching them on for everybody would make an existing hardware line longer without being asked.

Name styles (normal / super / sub) work the same way as in Personal Status, so a long GPU name can be shrunk instead of dropped.

Custom strings

At the bottom of the card, Custom line replaces the automatically assembled hardware lines with a template you write yourself. This is where the card stops being a list of checkboxes and becomes a layout tool.

The default template:

🎮 {gpu_name} {gpu_usage} | {gpu_temp} {temp_icon} \n
⚙️ {cpu_name} {cpu_usage} | {cpu_temp} {temp_icon} \n
VRAM {vram_usage} RAM {ram_usage} {ram_type}

Rules worth knowing:

  • \n (backslash-n) becomes a real line break.
  • A placeholder with no value disappears together with its separators. {gpu_temp} | {cpu_temp} with no GPU sensor renders as 55°C, not as | 55°C. This is why templates can be written optimistically.
  • The checkboxes above still apply. A value you switched off is empty, so {gpu_power} in the template shows nothing while "GPU watts" is off — the template asks, the checkbox permits.
  • The + button next to the field opens the placeholder picker, so nothing has to be typed from memory.

Available hardware placeholders:

{gpu_name}   {gpu_usage}  {gpu_temp}  {gpu_power}  {vram_usage}
{cpu_name}   {cpu_usage}  {cpu_temp}  {cpu_power}
{ram_usage}  {ram_type}   {fps}       {temp_icon}

Two style markers can wrap any part of a line:

{sup/"RX 9070 XT"}      renders small and raised
{sub/{cpu_usage}}       renders small and lowered

MediaPlay

What is currently playing, read from the system's own media interface — not from a specific player.

Platform Interface
Linux MPRIS over D-Bus
Windows GlobalSystemMediaTransportControls (GSMTC)

Anything that registers there works: Spotify, Firefox, VLC, YouTube in a browser, a local player. No configuration, no API key, no account.

Display options

Option Default What it shows
Artist on Artist name
Title on Song title
Title length 40 Cut-off in characters (3–64)
Time on Position and length
Time with seconds on 1:27/3:45; off gives the older 0:03 style
Time style normal normal / super / sub
Time position own line See below
Song bar on The progress bar
Bar style 3 6 presets, plus a custom one
Bar size 100 % Bar length, 30–100 %
Icon off A small ♪ in front of the line
Lyrics off Synced lyrics, see below
Idle text ⏸ Shown while nothing is playing
Poll interval 1 sec How often the player is asked

Time position

Where the timer sits relative to the bar:

line     0:27/1:06 on its own line with artist and title
before   0:27/1:06 ▓▓░░░░
after    ▓▓░░░░ 0:27/1:06
split    0:27▓▓░░░░1:06

Song bar

Six presets, from a minimal rule to a solid block bar:

[───●────────]      ──■──        [█████░░░░░░░]

The custom style lets you set the left cap, the fill character, the head, the empty character and the right cap individually — so a bar built entirely out of hearts or arrows is a matter of five fields.

Lyrics

Synced, line-by-line lyrics matched to the playback position.

  • Online: fetched from LRCLIB. Off by default, because on means network requests.
  • Local: your own .lrc files from a folder you choose. Default ~/.config/OSC-DreamChatbox/lyrics/.
  • A small prefix symbol (default ♪) marks the lyric line. It can be changed or switched off.

Idle behaviour

When nothing is playing, the media line does not simply vanish — a line that disappears looks like the app stopped working. Instead the idle text (default ⏸) takes its place. Switch it off if you prefer the line to go away.

Custom strings

Like Hardware, MediaPlay has a Custom line field that replaces the assembled output:

{artist} : {title} | {time}\n{bar}

Placeholders: {artist} {title} {time} {time_status} {time_end} {bar} {lyrics} {lyrics_prefix} {icon_sound} {media_idle}


Custom Box

A decorative frame around the message: one line above everything, one line below.

🕐12:45🕐 ───────
Status text here
Artist : Title
───── OSC-DreamChatbox

Settings

Setting Default What it does
Active off Whether the frame is drawn
Template Heavy One of 12 presets, or custom
Top line on Draw the upper line
Bottom line on Draw the lower line
Top mode custom none, clock or custom text
Bottom mode custom same
Top text 🕐{box_clock}🕐 The middle text of the upper line
Bottom text OSC-DreamChatbox The middle text of the lower line
Fill width top 7 Fill characters either side of the middle text
Fill width bottom 3 same, for the lower line
Align both lines off Force both lines to the same width
Live clock on Update the clock every second
Clock format 24h HH:MM 12h / 24h, with or without seconds

The 12 presets: Light, Heavy, Double, Rounded, Dashed, Blocks, Rule, Corners, Stars, Hearts, Arrows, Sparkles. The custom template exposes the individual characters — left cap, fill, right cap — for each line.

Why it is off by default

How wide a frame line can get before the VRChat chatbox wraps it depends on the font and on which characters are on the line. No default can know that; it has to be set once, by eye, against the game. Everything is pre-filled, so switching it on gives a working frame to adjust from rather than a blank.

Placement, and the All-in-one exception

With All in one off, the frame wraps the whole message automatically.

With All in one on, it does not. Instead the frame appears exactly where you place it:

{box_start}     the top line
{box_stop}      the bottom line
{box_text}      just the middle text, without the frame characters

This is deliberate. A wrap can only ever be right for one of your AIO strings, and it would sit outside the plugin lines as well. Placing it yourself means it lands where it belongs — including in the middle of a message, or only on some of your strings.

The placeholders work whether or not the card is Active, so you can use the frame styling without any automatic wrapping at all.

OSC-DreamChatbox · GPL-3.0-or-later · github.com/yakuda-stack/OSC-DreamChatbox

Clone this wiki locally