Community:OSC Resources: Difference between revisions
From VRChat Wiki
add CoreOSC and OscQueryLibrary |
added vrchat_osc, and collapsible table |
||
| Line 8: | Line 8: | ||
==Libraries== | ==Libraries== | ||
{| class="wikitable" style="text-align:center" | {| class="wikitable" style="text-align:center; table-layout:fixed; width:100%" | ||
|- | |- | ||
! | ! | ||
! style="width: | ! style="width: 3%; writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap; padding: 0.35em 0.1em;" | [https://github.com/radarsat1/liblo liblo] | ||
! style="width: | ! style="width: 3%; writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap; padding: 0.35em 0.1em;" | [https://github.com/LucHeart/CoreOSC-UTF8-ASYNC CoreOSC] | ||
! style="width: | ! style="width: 3%; writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap; padding: 0.35em 0.1em;" | [https://github.com/stella3d/OscCore OscCore] | ||
! style="width: | ! style="width: 3%; writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap; padding: 0.35em 0.1em;" | [https://github.com/Natsumi-sama/OscQueryLibrary OscQueryLibrary] | ||
! style="width: | ! style="width: 3%; writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap; padding: 0.35em 0.1em;" | [https://github.com/vrchat-community/vrc-oscquery-lib vrc-oscquery-lib] | ||
! style="width: | ! style="width: 3%; writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap; padding: 0.35em 0.1em;" | [https://github.com/hypebeast/go-osc go-osc] | ||
! style="width: | ! style="width: 3%; writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap; padding: 0.35em 0.1em;" | [https://github.com/hoijui/JavaOSC JavaOSC] | ||
! style="width: | ! style="width: 3%; writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap; padding: 0.35em 0.1em;" | [https://github.com/colinbdclark/osc.js osc.js] | ||
! style="width: | ! style="width: 3%; writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap; padding: 0.35em 0.1em;" | [https://github.com/jangxx/node-oscquery node-oscquery] | ||
! style="width: | ! style="width: 3%; writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap; padding: 0.35em 0.1em;" | [https://github.com/attwad/python-osc python-osc] | ||
! style="width: | ! style="width: 3%; writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap; padding: 0.35em 0.1em;" | [https://github.com/theepicsnail/vrchat_oscquery vrchat_oscquery] | ||
! style="width: | ! style="width: 3%; writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap; padding: 0.35em 0.1em;" | [https://github.com/fraklein/python-oscquery python-oscquery] | ||
! style="width: | ! style="width: 3%; writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap; padding: 0.35em 0.1em;" | [https://github.com/cyberkitsune/tinyoscquery tinyoscquery] | ||
! style="width: | ! style="width: 3%; writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap; padding: 0.35em 0.1em;" | [https://github.com/klingtnet/rosc rosc] | ||
! style="width: | ! style="width: 3%; writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap; padding: 0.35em 0.1em;" | [https://lib.rs/crates/oscquery oscquery] | ||
! style="width: | ! style="width: 3%; writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap; padding: 0.35em 0.1em;" | [https://github.com/minetake01/vrchat_osc vrchat_osc] | ||
! style="width: 3%; writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap; padding: 0.35em 0.1em;" | [https://github.com/orchetect/OSCKit OSCKit] | |||
|- | |- | ||
! style="text-align:left" | Language | ! style="text-align:left" | Language | ||
| Line 42: | Line 43: | ||
| style="writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap;" | Python | | style="writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap;" | Python | ||
| style="writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap;" | Python | | style="writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap;" | Python | ||
| style="writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap;" | Rust | |||
| style="writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap;" | Rust | | style="writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap;" | Rust | ||
| style="writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap;" | Rust | | style="writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap;" | Rust | ||
| Line 60: | Line 62: | ||
| style="writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap;" | MIT | | style="writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap;" | MIT | ||
| style="writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap;" | MIT | | style="writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap;" | MIT | ||
| style="writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap;" | MIT / Apache-2.0 | |||
| style="writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap;" | MIT / Apache-2.0 | | style="writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap;" | MIT / Apache-2.0 | ||
| style="writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap;" | MIT / Apache-2.0 | | style="writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap;" | MIT / Apache-2.0 | ||
| style="writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap;" | MIT | | style="writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap;" | MIT | ||
|- | |- | ||
! colspan=" | ! colspan="18" style="text-align:left; background:#9AA0AA; color:#fff" | OSC transport | ||
|- | |- | ||
! style="text-align:left" | Send messages | ! style="text-align:left" | Send messages | ||
| Line 82: | Line 85: | ||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| style="background:#22A84A; color:#fff" | ✓<ref name="vrchat-osc-rosc">OSC UDP encode/decode via bundled [https://github.com/klingtnet/rosc rosc].</ref> | |||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
|- | |- | ||
| Line 100: | Line 104: | ||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| style="background:#22A84A; color:#fff" | ✓<ref name="vrchat-osc-rosc" /> | |||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
|- | |- | ||
| Line 118: | Line 123: | ||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| style="background:#22A84A; color:#fff" | ✓<ref name="vrchat-osc-rosc" /> | |||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
|- | |- | ||
! colspan=" | ! colspan="18" style="text-align:left; background:#9AA0AA; color:#fff" | VRChat types | ||
|- | |- | ||
! style="text-align:left" | <code>i</code> (int32) | ! style="text-align:left" | <code>i</code> (int32) | ||
| Line 134: | Line 140: | ||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| style="background:#22A84A; color:#fff" | ✓<ref name="python-osc-dep" /> | | style="background:#22A84A; color:#fff" | ✓<ref name="python-osc-dep" /> | ||
| style="background:#22A84A; color:#fff" | ✓ | |||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| Line 141: | Line 148: | ||
|- | |- | ||
! style="text-align:left" | <code>f</code> (float32) | ! style="text-align:left" | <code>f</code> (float32) | ||
| style="background:#22A84A; color:#fff" | ✓ | |||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| Line 159: | Line 167: | ||
|- | |- | ||
! style="text-align:left" | <code>s</code> (string) | ! style="text-align:left" | <code>s</code> (string) | ||
| style="background:#22A84A; color:#fff" | ✓ | |||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| Line 177: | Line 186: | ||
|- | |- | ||
! style="text-align:left" | <code>T</code> (True) | ! style="text-align:left" | <code>T</code> (True) | ||
| style="background:#22A84A; color:#fff" | ✓ | |||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| Line 207: | Line 217: | ||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| style="background:#22A84A; color:#fff" | ✓ | |||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| Line 212: | Line 223: | ||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
|- | |- | ||
! colspan=" | ! colspan="18" class="mw-customtoggle-ot-b-blob mw-customtoggle-ot-h-int64 mw-customtoggle-ot-d-float64 mw-customtoggle-ot-t-timetag mw-customtoggle-ot-s-symbol mw-customtoggle-ot-c-char mw-customtoggle-ot-r-rgba-color mw-customtoggle-ot-u mw-customtoggle-ot-m-midi-message mw-customtoggle-ot-n-nil mw-customtoggle-ot-i-infinitum mw-customtoggle-ot-array" style="text-align:left; background:#9AA0AA; color:#fff; cursor:pointer" | Optional types | ||
|- | |- class="mw-collapsible mw-collapsed" id="mw-customcollapsible-ot-b-blob" | ||
! style="text-align:left" | <code>b</code> (blob) | ! style="text-align:left" | <code>b</code> (blob) | ||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| Line 231: | Line 242: | ||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
|- | | style="background:#22A84A; color:#fff" | ✓ | ||
|- class="mw-collapsible mw-collapsed" id="mw-customcollapsible-ot-h-int64" | |||
! style="text-align:left" | <code>h</code> (int64) | ! style="text-align:left" | <code>h</code> (int64) | ||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| Line 249: | Line 261: | ||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
|- | | style="background:#22A84A; color:#fff" | ✓ | ||
|- class="mw-collapsible mw-collapsed" id="mw-customcollapsible-ot-d-float64" | |||
! style="text-align:left" | <code>d</code> (float64) | ! style="text-align:left" | <code>d</code> (float64) | ||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| Line 267: | Line 280: | ||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
|- | | style="background:#22A84A; color:#fff" | ✓ | ||
|- class="mw-collapsible mw-collapsed" id="mw-customcollapsible-ot-t-timetag" | |||
! style="text-align:left" | <code>t</code> (timetag) | ! style="text-align:left" | <code>t</code> (timetag) | ||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| Line 285: | Line 299: | ||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
|- | | style="background:#22A84A; color:#fff" | ✓ | ||
|- class="mw-collapsible mw-collapsed" id="mw-customcollapsible-ot-s-symbol" | |||
! style="text-align:left" | <code>S</code> (symbol) | ! style="text-align:left" | <code>S</code> (symbol) | ||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| Line 302: | Line 317: | ||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| style="background:#D4890B; color:#fff" | ~<ref name="vrchat-osc-symbol">OSCQuery TYPE tag only; UDP encode/decode uses bundled [https://crates.io/crates/rosc rosc], which has no Symbol.</ref> | |||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
|- | |- class="mw-collapsible mw-collapsed" id="mw-customcollapsible-ot-c-char" | ||
! style="text-align:left" | <code>c</code> (char) | ! style="text-align:left" | <code>c</code> (char) | ||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| Line 321: | Line 337: | ||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
|- | | style="background:#22A84A; color:#fff" | ✓ | ||
|- class="mw-collapsible mw-collapsed" id="mw-customcollapsible-ot-r-rgba-color" | |||
! style="text-align:left" | <code>r</code> (RGBA color) | ! style="text-align:left" | <code>r</code> (RGBA color) | ||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| Line 336: | Line 353: | ||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| style="background:#22A84A; color:#fff" | ✓ | |||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
|- | |- class="mw-collapsible mw-collapsed" id="mw-customcollapsible-ot-u" | ||
! style="text-align:left" | <code>u</code> | ! style="text-align:left" | <code>u</code> | ||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| Line 357: | Line 375: | ||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
|- | | style="background:#C03030; color:#fff" | ✗ | ||
|- class="mw-collapsible mw-collapsed" id="mw-customcollapsible-ot-m-midi-message" | |||
! style="text-align:left" | <code>m</code> (MIDI message) | ! style="text-align:left" | <code>m</code> (MIDI message) | ||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| Line 375: | Line 394: | ||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
|- | | style="background:#22A84A; color:#fff" | ✓ | ||
|- class="mw-collapsible mw-collapsed" id="mw-customcollapsible-ot-n-nil" | |||
! style="text-align:left" | <code>N</code> (Nil) | ! style="text-align:left" | <code>N</code> (Nil) | ||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| Line 393: | Line 413: | ||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
|- | | style="background:#22A84A; color:#fff" | ✓ | ||
|- class="mw-collapsible mw-collapsed" id="mw-customcollapsible-ot-i-infinitum" | |||
! style="text-align:left" | <code>I</code> (Infinitum) | ! style="text-align:left" | <code>I</code> (Infinitum) | ||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| Line 411: | Line 432: | ||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
|- | | style="background:#22A84A; color:#fff" | ✓ | ||
|- class="mw-collapsible mw-collapsed" id="mw-customcollapsible-ot-array" | |||
! style="text-align:left" | <code>[]</code> (array) | ! style="text-align:left" | <code>[]</code> (array) | ||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| Line 426: | Line 448: | ||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| style="background:#22A84A; color:#fff" | ✓ | |||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
|- | |- | ||
! colspan=" | ! colspan="18" style="text-align:left; background:#9AA0AA; color:#fff" | OSCQuery server — VRChat attributes | ||
|- | |- | ||
! style="text-align:left" | HTTP server | ! style="text-align:left" | HTTP server | ||
| Line 447: | Line 470: | ||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| style="background:#22A84A; color:#fff" | ✓ | |||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| Line 465: | Line 489: | ||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| style="background:#22A84A; color:#fff" | ✓ | |||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| Line 483: | Line 508: | ||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| style="background:#22A84A; color:#fff" | ✓ | |||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| Line 501: | Line 527: | ||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| style="background:#22A84A; color:#fff" | ✓ | |||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| Line 519: | Line 546: | ||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| style="background:#22A84A; color:#fff" | ✓ | |||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| Line 537: | Line 565: | ||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| style="background:#22A84A; color:#fff" | ✓ | |||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| Line 555: | Line 584: | ||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| style="background:#22A84A; color:#fff" | ✓ | |||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| Line 573: | Line 603: | ||
| style="background:#D4890B; color:#fff" | ~<ref name="range-adv" /> | | style="background:#D4890B; color:#fff" | ~<ref name="range-adv" /> | ||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| style="background:#22A84A; color:#fff" | ✓ | |||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| Line 592: | Line 623: | ||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| style="background:#D4890B; color:#fff" | ~<ref name="desc-adv" /> | |||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
|- | |- | ||
! colspan=" | ! colspan="18" class="mw-customtoggle-oe-tags mw-customtoggle-oe-extended-type mw-customtoggle-oe-unit mw-customtoggle-oe-critical mw-customtoggle-oe-clipmode mw-customtoggle-oe-overloads" style="text-align:left; background:#9AA0AA; color:#fff; cursor:pointer" | OSCQuery server — additional OSCQuery attributes | ||
|- | |- class="mw-collapsible mw-collapsed" id="mw-customcollapsible-oe-tags" | ||
! style="text-align:left" | TAGS | ! style="text-align:left" | TAGS | ||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| Line 613: | Line 645: | ||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
|- | | style="background:#C03030; color:#fff" | ✗ | ||
|- class="mw-collapsible mw-collapsed" id="mw-customcollapsible-oe-extended-type" | |||
! style="text-align:left" | EXTENDED_TYPE | ! style="text-align:left" | EXTENDED_TYPE | ||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| Line 631: | Line 664: | ||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
|- | | style="background:#C03030; color:#fff" | ✗ | ||
|- class="mw-collapsible mw-collapsed" id="mw-customcollapsible-oe-unit" | |||
! style="text-align:left" | UNIT | ! style="text-align:left" | UNIT | ||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| Line 649: | Line 683: | ||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
|- | | style="background:#C03030; color:#fff" | ✗ | ||
|- class="mw-collapsible mw-collapsed" id="mw-customcollapsible-oe-critical" | |||
! style="text-align:left" | CRITICAL | ! style="text-align:left" | CRITICAL | ||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| Line 667: | Line 702: | ||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
|- | | style="background:#C03030; color:#fff" | ✗ | ||
|- class="mw-collapsible mw-collapsed" id="mw-customcollapsible-oe-clipmode" | |||
! style="text-align:left" | CLIPMODE | ! style="text-align:left" | CLIPMODE | ||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| Line 685: | Line 721: | ||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
|- | | style="background:#C03030; color:#fff" | ✗ | ||
|- class="mw-collapsible mw-collapsed" id="mw-customcollapsible-oe-overloads" | |||
! style="text-align:left" | OVERLOADS | ! style="text-align:left" | OVERLOADS | ||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| Line 702: | Line 739: | ||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| style="background:#C03030; color:#fff" | ✗ | |||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
|- | |- | ||
! colspan=" | ! colspan="18" style="text-align:left; background:#9AA0AA; color:#fff" | OSCQuery client | ||
|- | |- | ||
! style="text-align:left" | HTTP client | ! style="text-align:left" | HTTP client | ||
| Line 722: | Line 760: | ||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| style="background:#22A84A; color:#fff" | ✓ | |||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
|- | |- | ||
! colspan=" | ! colspan="18" style="text-align:left; background:#9AA0AA; color:#fff" | Service discovery | ||
|- | |- | ||
! style="text-align:left" | mDNS advertisement | ! style="text-align:left" | mDNS advertisement | ||
| Line 742: | Line 781: | ||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| style="background:#22A84A; color:#fff" | ✓ | |||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
|- | |- | ||
| Line 760: | Line 800: | ||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| style="background:#22A84A; color:#fff" | ✓ | |||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
|} | |} | ||
Latest revision as of 02:39, 14 August 2026
The following was created by the community. It may contain material not directly endorsed by the VRChat team. To learn more, consider reading Contributing to the VRChat Wiki.
Open Sound Control enables users to read and write data in VRChat. There are plenty of helpful community made tools and libraries, that use OSC, and makes developing OSC tools easier.
Tools
Libraries
| liblo | CoreOSC | OscCore | OscQueryLibrary | vrc-oscquery-lib | go-osc | JavaOSC | osc.js | node-oscquery | python-osc | vrchat_oscquery | python-oscquery | tinyoscquery | rosc | oscquery | vrchat_osc | OSCKit | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Language | C | C# | C# | C# | C# | Go | Java | JavaScript | TypeScript | Python | Python | Python | Python | Rust | Rust | Rust | Swift |
| License | LGPL-2.1+ | MIT | MIT | MIT | MIT | MIT | BSD-3-Clause | MIT / GPL-2.0 | MIT | Unlicense | None | MIT | MIT | MIT / Apache-2.0 | MIT / Apache-2.0 | MIT / Apache-2.0 | MIT |
| OSC transport | |||||||||||||||||
| Send messages | ✓ | ✓ | ✓ | ✗[1] | ✗ | ✓ | ✓ | ✓ | ✗ | ✓ | ✓[2] | ✗ | ✗ | ✓ | ✗ | ✓[3] | ✓ |
| Receive messages | ✓ | ✓ | ✓ | ✗[1] | ✗ | ✓ | ✓ | ✓ | ✗ | ✓ | ✓[2] | ✗ | ✗ | ✓ | ✗ | ✓[3] | ✓ |
| Bundle support | ✓ | ✓ | ~[4] | ✗[1] | ✗ | ✓ | ✓ | ✓ | ✗ | ✓ | ✓[2] | ✗ | ✗ | ✓ | ✗ | ✓[3] | ✓ |
| VRChat types | |||||||||||||||||
i (int32)
|
✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓[2] | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
f (float32)
|
✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
s (string)
|
✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
T (True)
|
✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
F (False)
|
✓ | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ | ✓ | ✓ | ✓ |
b (blob)
|
✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ | ✗ | ✓ | ✓ | ✓ | ✓ |
h (int64)
|
✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ | ~[5] | ✓ | ✓ | ✓ | ✓ |
d (float64)
|
✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ | ~[5] | ✓ | ✓ | ✓ | ✓ |
t (timetag)
|
✓ | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ | ✓ | ✓ | ~[6] | ✓ | ✗ | ~[5] | ✓ | ✓ | ✓ | ✓ |
S (symbol)
|
✓ | ✓ | ✓ | ✗ | ✗ | ✗ | ✓ | ✓ | ✓ | ✗ | ✗ | ✗ | ✗ | ✗ | ✓ | ~[7] | ✓ |
c (char)
|
✓ | ✓ | ✓ | ✗ | ✓ | ✗ | ✓ | ✓ | ✓ | ✗ | ✗ | ✗ | ✗ | ✓ | ✓ | ✓ | ✓ |
r (RGBA color)
|
✗ | ✓ | ✓ | ✓ | ✗ | ✗ | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ | ✗ | ✓ | ✓ | ✓ | ✗ |
u
|
✗ | ✗ | ✗ | ✗ | ✓ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ |
m (MIDI message)
|
✓ | ✓ | ✓ | ✓ | ✗ | ✗ | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ | ✗ | ✓ | ✓ | ✓ | ✓ |
N (Nil)
|
✓ | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ | ✗ | ✓ | ✓ | ✓ | ✓ |
I (Infinitum)
|
✓ | ✓ | ✓ | ✗ | ✗ | ✗ | ✓ | ✓ | ✓ | ✗ | ✗ | ✗ | ✗ | ✓ | ✓ | ✓ | ✓ |
[] (array)
|
✗ | ✓ | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ | ✗ | ✓ | ✓ | ✓ | ✓ |
| OSCQuery server — VRChat attributes | |||||||||||||||||
| HTTP server | ✗ | ✗ | ✗ | ✓ | ✓ | ✗ | ✗ | ✗ | ✓ | ✗ | ~[8] | ✓ | ✓ | ✗ | ✓ | ✓ | ✗ |
| HOST_INFO | ✗ | ✗ | ✗ | ✓ | ✓ | ✗ | ✗ | ✗ | ✓ | ✗ | ~[9] | ✓ | ✓ | ✗ | ✓ | ✓ | ✗ |
| FULL_PATH | ✗ | ✗ | ✗ | ✓ | ✓ | ✗ | ✗ | ✗ | ✓ | ✗ | ~[10] | ✓ | ✓ | ✗ | ✓ | ✓ | ✗ |
| CONTENTS | ✗ | ✗ | ✗ | ✓ | ✓ | ✗ | ✗ | ✗ | ✓ | ✗ | ~[10] | ✓ | ✓ | ✗ | ✓ | ✓ | ✗ |
| TYPE | ✗ | ✗ | ✗ | ✓ | ✓ | ✗ | ✗ | ✗ | ✓ | ✗ | ✗ | ✓ | ✓ | ✗ | ✓ | ✓ | ✗ |
| ACCESS | ✗ | ✗ | ✗ | ✓ | ✓ | ✗ | ✗ | ✗ | ✓ | ✗ | ✗ | ✓ | ✓ | ✗ | ✓ | ✓ | ✗ |
| VALUE | ✗ | ✗ | ✗ | ✓ | ✓ | ✗ | ✗ | ✗ | ✓ | ✗ | ✗ | ✓ | ✓ | ✗ | ✓ | ✓ | ✗ |
| RANGE | ✗ | ✗ | ✗ | ~[11] | ~[11] | ✗ | ✗ | ✗ | ✓ | ✗ | ✗ | ✗ | ~[11] | ✗ | ✓ | ✓ | ✗ |
| DESCRIPTION | ✗ | ✗ | ✗ | ~[12] | ~[12] | ✗ | ✗ | ✗ | ✓ | ✗ | ✗ | ✓ | ~[12] | ✗ | ✓ | ~[12] | ✗ |
| OSCQuery server — additional OSCQuery attributes | |||||||||||||||||
| TAGS | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✓ | ✗ | ✗ | ✗ | ✗ | ✗ | ✓ | ✗ | ✗ |
| EXTENDED_TYPE | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✓ | ✗ | ✗ |
| UNIT | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✓ | ✗ | ✗ |
| CRITICAL | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✓ | ✗ | ✗ | ✗ | ✗ | ✗ | ✓ | ✗ | ✗ |
| CLIPMODE | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✓ | ✗ | ✗ | ✗ | ✗ | ✗ | ✓ | ✗ | ✗ |
| OVERLOADS | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✓ | ✗ | ✗ |
| OSCQuery client | |||||||||||||||||
| HTTP client | ✗ | ✗ | ✗ | ✓ | ✓ | ✗ | ✗ | ✗ | ✓ | ✗ | ✗ | ✓ | ✓ | ✗ | ✗ | ✓ | ✗ |
| Service discovery | |||||||||||||||||
| mDNS advertisement | ✗ | ✗ | ✗ | ✓ | ✓ | ✗ | ✗ | ✗ | ✓ | ✗ | ✓ | ✓ | ✓ | ✗ | ✗ | ✓ | ✗ |
| mDNS discovery | ✗ | ✗ | ✗ | ✓ | ✓ | ✗ | ✗ | ✗ | ✓ | ✗ | ✗ | ✓ | ✓ | ✗ | ✗ | ✓ | ✗ |
- ↑ 1.0 1.1 1.2 Pair with a separate OSC library such as LucHeart.CoreOSC for UDP transport (see the example project).
- ↑ 2.0 2.1 2.2 2.3 Via bundled python-osc dependency; bundle support requires using python-osc's API directly.
- ↑ 3.0 3.1 3.2 OSC UDP encode/decode via bundled rosc.
- ↑ Receive fully supported including nested bundles; send requires low-level
OscWriterAPI. - ↑ 5.0 5.1 5.2 lossy type mapping to Python float.
- ↑ receive-only
- ↑ OSCQuery TYPE tag only; UDP encode/decode uses bundled rosc, which has no Symbol.
- ↑ Minimal VRChat-specific subset; only serves
/and/?HOST_INFO. - ↑ Returns
OSC_PORTonly; missingNAME,EXTENSIONS,OSC_IP,OSC_TRANSPORT. - ↑ 10.0 10.1 Hardcoded to
/avatarand/trackingpaths; not a dynamic OSC address tree. - ↑ 11.0 11.1 11.2 Advertised as supported in HOST_INFO extensions but not implemented at the node level.
- ↑ 12.0 12.1 12.2 12.3 Supported on the node level but not advertised in HOST_INFO extensions.