Uses your stored VRCX data to calculate when your friends are online. This data can then be used to chart the optimal times for you to play VRChat if you want to hang out with your friends!
For the best results, you'll need to have used VRCX for a reasonably long time to gather enough data to show trends.
- Download vrcx-optimal-time.exe, or your platform's artifact for non-Windows OS's.
- Place the file wherever you want.
- Create a file name
config.toml
next to the vrcx-optimal-time executable - Fill in the config by referencing the provided example config.toml.
- Run the application to get tab-delimited output in your console. If you want it in a file, something like
vrcx-optimal-time > output.txt
should work in most shells. - Paste the output into your charting software of choice
- @RubenPX has created an easy to use web-based viewer here.
- Here's an example Google Sheet that you can copy, then directly paste the program output into.
- Create a neat chart!
Here's an example chart generated from approximately 200 friends worth of data captured over 2 years. VRCX was running for ~900 hours out of that time span.
- Install Rust
- Clone the project
cargo build --release
I was curious when my peeps are online most often, as it makes sense to sync up my VRC schedule with them as much as possible.
The output is in your system's local time. There's no weird daylight-savings-time edge-cases, because VRCX actually stores timestamps correctly (thanks VRCX devs).
Yes! I specifically open VRCX.sqlite3
as readonly, so there is zero chance of vrcx-optimal-time breaking your VRCX database. However, if VRCX writes to VRCX.sqlite3
while vrcx-optimal-time is running, then the concurrent access is actually handled by sqlite itself! I will wait for up to 5 seconds for the database to unlock. After that I give up and panic.
Yeah! That's what friends are for! I'm stalking you, specifically! 😈
...but real talk, the data is scuffed if you filter it to only one friend. If you're trying to sync up your schedule with a single person, then your time would be better spent asking them when they play instead of doing a bunch of data science.
- Create 10 minute "buckets" across a week
- 7 days/week * 24 hours/day * 60 minutes/hour / (10 minutes/bucket) = 1008 buckets/week
- bucket duration can be configured via
config.toml
- Grab all friend Online/Offline events from
VRCX.sqlite3
- Optionally, filter friends to some subset configured in
config.toml
- Iterate over the events in chronological order
- For an Online event, add the event time to a UserId->Time map.
- If there is already an Online event, simply overwrite it, as we are trying to make time ranges
- For an Offline event, pop the preceding Online event from the map
- If there is no Online event, we can't build a time range, so drop it
- Take into account when VRCX was or wasn't running, truncating time ranges as necessary
- For each bucket covered by the Online->Offline time range, increment the bucket's count by 1.
- Optionally, normalize friend online counts according to when VRCX was actually collecting data in order to remove bias.
The buckets now contain the number of friends online during that time. This can be trivially exported to a tab-delimited file and charted as a histogram.