#development-advanced
1 messages · Page 4 of 1
I think i can live with that actually
more curious to see the latency from others
ah yeah could be a throughput thing then
maybe it has to buffer more because server's farther away
idk tbh
I've decided to add thumbnail images to my YT search. I don't know the best way to accomplish this and I see multiple ways it can be done. Discussion/feedback (or code) will be appreciated. I already get textual information using VRCStringDownloader. Not a problem and if the images can be handled this way I think it would be the "cleanest" solution. Should I convert the thumbnail to binary data and use that? Seemingly I can generate some sort of sprite sheet and download them all in one go. I would have to split them apart of course but could this be a better way? And finally I could resort to the VRCImageDownloader but this seems to be the worst of the alternatives due to its limitations.
Generate a sprite sheet on the server, download the thing via image loader, and use some math to figure out the UVcoord for each image component no splitting required
Beware you might want to +1-1 to the x/y before generating UV to avoid texture bleed
Thanks for the pointer... I'll have to see if I can make this work. I get a bit lost in the world of textures, materials, images, sprites and such.
I know the VRC world running as a test build can access a public API e.g. https://vr.example.com/test is there a way to have it access a test API running locally such as https://localhost:5148/test
Excellent, i should have tested this earlier. Now I can step/trace through the service calls from in-world.
I'm looking at some states within GogoLoco, and I see this state has a strangely configured VRC Avatar Parameter Driver:
If I also look in the debug view for that component, I see that the names are "content, encryptionOid, and keySize"
The source is also a special character:
ȋ
and the value is 7.314778e-43
Does anybody know what this is trying to do?
does Udon have methods for talking to other input devices like steering wheels?
Depends on how steering wheels interact with Unity, we do have access to all of this https://creators.vrchat.com/worlds/udon/input-events/#unity-input-methods-and-properties
No clue whether it needs anything special, I've certainly never implemented steering wheel support into anything.
You can read the input of a player's controller in a unified way across all platforms by using Udon Input Events. These events will work correctly even when the player has remapped their controls.
When I use:
public class InterfaceCode : MonoBehaviour, IPreprocessCallbackBehaviour, IEditorOnly
{
public bool OnPreprocess()
{
...
if (interfaceObjectLeft != null)
{
VRCConstraintSource leftSource = leftConstraint.Sources[code];
leftSource.SourceTransform = interfaceObjectLeft.transform;
leftSource.Weight = 1f;
leftConstraint.Sources[code] = leftSource;
}
...
return true;
}
public int PreprocessOrder => -1;
The VRCConstraintSource cannot set SourceTransform, After uploading, it will become None.
I have tried to add a lot of debug information to check for issues, but I still don't know why this is happening.
The compiler did not report any errors, and all other functions are running normally.
unity 2022.3.22f1 sdk3.7.1
Anybody got any leads
is the cast from Transform to SourceTransform working? I'm not familiar with what the type SourceTransform is
is working when i use av3 test,but in VRC uploading, it will become None.
Transform
I need full avatar display icons to create a ui, but they are nowhere to be found. even similar or parodies of them
Do websockets work in VRChat?
Nop
no, but there's other ways to get data in/out. what are you trying to do?
I ported the Realtime API from OpenAI over to unity and wanted to push my world to VRChat. It only works with websockets though.
there's a few ways you can get data into worlds, but not many ways to get data out afaik. disclaimer, I do not make worlds, but I've picked up a good amount of info about world creation.
there's 3 main ways you can use to get data into worlds:
- Udon String loading
- Udon Image loading
- Video players
afaik, string loading can be used to send JSON
Hmmmm probbbbbly not going to cut it unfortunately. I’ll have to release it as standalone I guess
So I figured I’d test it out since it was working really well in the tester. I pushed the world to community worlds and sure enough it didn’t work.
Bummer
What exactly are you using websockets for currently?
The websocket allows for live streaming audio input data to the open AI real time API.
I.e: https://x.com/aj_dev_smith/status/1839472954289131947?s=42
Not the best example since guidelines don’t really let it sing, but you get the idea.
I made a port for VR. Would be nice to have it in a world.
only thing i could think of doing is making a rtsp server with the audio and put that on a media player, and have the user put the prompt in a textbox with a base url + prompt to an endpoint that triggers the prompt to play on the rtsp server
rtsp server is only for realtime streaming, if you are okay with it taking a sec you could have the baseurl + prompt put into a media player and generate a mp4 once the prompt completes and send that back
Maybe will work. I’m gonna try something else to get the socket to work since I think I was looking at the microphone wrong in VR chat the first time I tried
yeah afaik theres no way to get mic audio
and rtsp/hls are the only real sockets you can use
What if I attach it to avatars? https://vrcstt.com
Discover VRChat Speech To Text! A new way of socializing with your friends in the game! Find out more about the tool on our Home page.
Like the demon on your shoulder lol
So if I call length of microphones, what do I get?
Since all programming has to be run through the Udon VM for it to work, you'd probably get the Udon compiler being annoyed at you and refusing to compile since getting the microphone isn't a valid function.
IIRC that does everything outside of VRC then just OSC's the text to the avatar. Doesn't sound like it would suit what you wanted.
Oh I thought it was doing live transcriptions.
It is, but outside of VRC
Ah so they’re a companion app or something. Interesting.
The older ones used to do it via Chrome's inbuilt translation thing but that one looks like it uses actual paid services.
Oh why. Why why why oh why. Why did they make the mic toggle hard input bindings? https://docs.vrchat.com/docs/valve-index#binding-customization-notes
VRChat offers support for the Valve Index Controllers ! Finger Posing The Valve Index Controllers contain capacitive sensors for the pinky, ring, and middle fingers. It also contains capacitive sensors on the trigger for the index finger, and sensors on the thumbpad/touchpad/buttons to sense when yo...
Does anyone have info on this? I'd rather not have mute toggle be forced on my left A button while playing VRChat on Linux through Monado, I wanted to re-bind it to gesture toggle via OpenXR API Layer but it looks like that's not possible anymore.
you would have to use xrbinder for it iirc
I'm needing a bit of help with some vector and quaternion math. Suppose I have a position and direction, such as the position of a player's head, and the direction they are looking. How can I get a position that is offset to a random point within a circle that oriented orthogonally to the view direction, such that lines drawn from each point towards the direction are parallel?
Or in other words, rather than a cone effect drawn from origin and diverging as they go, I'm wanting a circular origin space, where lines from origin along the direction are parallel like a cylinder. How can I offset the origin positions in a random circular radius aligned with the view direction?
I suspect UnityEngine.Random.insideUnitCircle will be my friend, but rotating those components to align in 3d is where I'm struggling.
I would do this:
- Construct the set of points that make up the circle, in local space as if the center of the circle is 0,0,0
- Multiply each of the points by the head quaternion rotation
- Add the head position to each of the points
If I'm understanding correctly, the idea here is to preconstruct the offsets while aligned with an axis, then rotate the resulting positions around the origin towards the desired direction?
yep!
Okay cool, I shall give that a shot. Thank you 🙂
any time you want a complex set of points oriented in a specific way, that's a good way to do it. Build from the ground up in an easy location then deploy it where you want, rather than making the math way more complicated by deploying it already in the place you want
Okay, here's the solution I implemented, and it appears to be working 🙂
Vector3 offsetPosition = transform.position + Quaternion.FromToRotation(Vector3.up, transform.rotation * Vector3.forward) * new Vector3(randCircle.x, 0, randCircle.y);```
Where `radius` is the size of the circle, `offsetPosition` is the point I'm looking to use, and the `transform` is at the position and rotation I'm offsetting from/using.
Quaternion.FromToRotation was the key, allowing me to rotate the unit circle from the up rotation to the desired forward rotation, then applying the positional offsets to the starting position.
Thanks again 😄
just made a bot for a group im admin in that logs all group events
code is at https://github.com/imlvna/vrclogbot if anyone wants to use it
font for what?
What do I need to add to my .cs file to be able to work with the VRC constraints? Please keep in mind that I am an idiot when answering. Thank you. (I am trying to update an existing editor script for use on avatars in Unity.)
Kinda languishing about this since the devs said on canny that you could code with the vrc constraints but I can’t figure it out/find documentation
From searching in here, this is what I need to add at the top of my script:
Anyone figure out a way to instantiate a prefab with Udonsharp components without it breaking ingame for vrchat? Like in unity the scripts function fine, but in vrchat its almost like they loose the ability to set variables
@plush bluff You posted this as advice to someone before, and I copied what you put p much exactly, but I get a namespace error for "VRCConstraintSource".
Does this not work yet either? Do I have to do something else? Should I just edit my script to be parameterless for now since you guys are gonna update it anyway and this is like, way more verbose?
||VRCConstraintSource source = new VRCConstraintSource(GameObject.Find("ROOT/Hips").transform, 1.0f, Vector3.zero, Vector3.zero, Vector3.zero);
PositionConstraintToHips.Sources.Add(source);||
using VRC.SDK3.Dynamics.Constraint.Components;?
Yeah I added that and it resolved my namespace issue from just, trying to work with them at all.
For instance, I can now do PositionConstraintToHips.AddComponent<VRCPositionConstraint>(); without a namespace error
But now I'm trying to add sources...
using VRC.SDK3.Dynamics.Contact.Components;
using VRC.SDK3.Dynamics.Constraint.Components;```
I have those three included.
Well other stuff too
so whats the problem
PositionConstraintToHips.Sources.Add(source);```
That doesn't work, I get a namespace error on "VRCConstraintSource"
did you add using VRC.SDK3.Dynamics.Constraint.Components;
Yeah? I copy pasted it into here from further up in the script, it's in there.
using VRC.SDK3.Dynamics.Constraint.Components;
Yeah, it matches yours.
If the VRCConstraintSource thing is supposed to be included in that, maybe my project is wonky?
I DON'T get a namespace error on adding the constraint, I DO get a namespace error on attempting to add a source. if that's like, messed up, then my project is messed up I guess, I'll reload the SDK and see if it helps.
try using VRCConstraintSource = VRC.Dynamics.VRCConstraintBase.ConstraintSource;
I appreciate the help, but my project didn't. "The type name 'ConstraintSource' does not exist in the type 'VRCConstraintBase'"
Error on the line with what you just suggested.
wheres VRCConstraintSource come from, i cant find any docs on it
can it even be done
I posted a snip of a staff member's suggested code but maybe they were helping someone with world scripting...?
It's this, @dry pendant
That's where Dexvoid posted exactly this, it's a weird verbose way of doing it anyway... I'm annoyed a little though because when I asked on the canny about whether they had editor scripting implemented they were like, Well we definitely do so what can't you do? and it's like. well apparently I can't add Sources which seems really basic
Hello, the class VRCConstraintSource is in the namespace VRC.Dynamics. You'll need to add the following at the top of your script:
using VRC.Dynamics;
Additionally, the constructor of VRCConstraintSource takes four parameters, not five. You'll need to remove the last Vector3.zero on the first line in this snippet.
If you aren't already, I would strongly recommend using a code editor that includes Intellisense or similar, because it can resolve dependencies like this for you automatically. Visual Studio Community is a free option for non-commercial projects. Visual Studio Code is another possible choice.
Sorry for any confusion. Regarding your comment about adding sources, we weren't aiming for an exact one-to-one match against Unity's programmer interface for constraints. You can add sources to VRChat constraints by modifying the Sources list on a constraint, as you're doing now in your code snippet.
Thank you so much!
I have no clue how to use
I'm looking for a reasonable solution. I have a VRC URL Input and as we know we cannot set the text value via code. The user can of course. But the user can accidentally clear the entire input field and in such a case there is no way to recover the URL. The user has to rejoin or someone has to remind them what the URL was and they rekey it. So I thought perhaps a mechanism to copy a string value into the clipboard would enable the user to simply paste the URL back. This isn't the code changing the value, the user is via the virtual keyboard where cut and paste is supported. I can't get CopyToClipboard to work and the only way I can see to "copy" is from another input field. This obviously gives a person a second chance but again if they clear that second input there is no way to regenerate it. Ah but maybe given that the "backup" wouldn't be a URL input (I will have to try that). Meanwhile does anyone know how I might click on a text field (not an input) and copy a string into the clipboard such that the user could paste it into the VRC URL Input?
We shouldn't have to work this hard 🙂
So not ideal but clearly not the worst alternative. We can (as expected) set the text value of an input that isn't a VRC URL. And I could easily reset that if it was accidentally changed by a user. Still having to pop open an input in order to get a string set in the clipboard is a bit odd. So I'm looking for something that could set a value in the clipboard directly when (for instance) a text element was clicked. Again, the user is setting the VRC URL value so that part will work.
Udon doesn't get access to the clipboard and you can't easily convert from string back to VRCUrl so the best you could do is keep track of any previously entered URLs with VRCUrlInputField.GetUrl() and let them click a button or select from a dropdown list to restore whatever the intended URL is with VRCUrlInputField.SetUrl()
Oh gosh overthinking the solution strikes again 🙂 Of course SetUrl would work, it is how I set the default already. And any "click" event can reset it so that's easy enough, thanks.
while url inputs cannot be generated by code, text inputs can
add a normal textbox with the original and make sure it isnt removed
I'm getting this error:
"'VRCRotationConstraint' does not contain a definition for 'rotationAxis' and no accessible extension method 'rotationAxis' accepting a first argument of type 'VRCRotationConstraint' could be found (are you missing a using directive or an assembly reference?)"
when trying to set a new VRC Rotation Constraint to be locked on two axes only, using the old way, YZtoHips.GetComponent<VRCRotationConstraint>().rotationAxis = Axis.Z;
Uhh besides the part where I forget how to do two and not just one, is this another namespace problem? I use Visual Studio Basic and I'm not very good at this so idk how to fill out my namespaces automatically
Also is there somewhere to go for scripting documentation besides here? I tried searching "rotationAxis" in the history but no one's asked anything about it yet.
I've encountered a rather confounding bug. I have an UdonSharp script that's used on an object that's instantiated and added to a custom object pool. Previously it worked completely fine, but after an update that involves occasionally reparenting it (may or may not be relevant), a small random percentage of the time specific instances of the object appear to execute the script twice (forces applied in FixedUpdate are applied twice for example).
I was only able to tell that's what was going on because whatever is causing the script to execute twice is also causing that second instance of the script to execute even when the object is disabled. I watched a public random float continue to change while disabled (was previously private but made public to debug the issue), while other unaffected clones of the object continued to run as expected, not updating the value while disabled. All had been reparented, so it doesn't appear to be deterministic regarding that alone.
Anyone run into or otherwise aware of this sort of thing happening? I don't want to rule out the possibility that there's a bug in my code, but given the execution while disabled behavior this reads to me like it's something anomalous going on with Udon/Unity.
Does anyone have suggestions on how best to handle the case of vertical formatted videos? In particular with the AVPro video player but the solution may apply to any of them. I'd like it to not modify the dimensions of the video screen but (ideally) black out or dim the sides so the videos do not stretch. Many quick videos are vertical these days and I suspect more to come.
I am under the assumption that I could override OnVideoReady at which time I have the height and width (and duration as well) of the video. So as to not change "the screen" I believe I would have two elements represent the screen. One is always the physical size of the screen (and could be gray) and the other would be used to display the video. This would permit resizing of that element without the "physical screen" growing and shrinking. Does that sound good?
You could do that actually with ProTV I believe, you have to toggle off the checkbox for allowing it to dynamically resize the render texture for video texture output.
So you could specify the texture size ahead of time.
@tribal horizon Pinging to make sure you can see this.
This is something I've done recently
Appreciate it... I'm trying out my idea. I'm really not going to switch video players for this. ProTV is a wrapper component and while I believe it serves many people's needs I think it does more than I need it to.
That's fair, just putting it out there if you have exhausted the alternatives
I often get exhausted... but I keep going anyway 🙂
Yup, Through the Fire and Flames we carry on
seems fine. most player prefabs do it at the shader level, but since it's your own system and you control everything including the screen, i don't see a problem doing it this way
Thanks for the reply. I can switch things (somewhat) I'm working on calculating the aspect ratio at this point. Trying to keep the height constant but to vary the width appropriately. This sort of math always takes me a number of tries.
Oh, while I've got people replying... is there any generally accepted z value to separate objects so Z fighting doesn't occur. At the moment I've just pulled the "actual display" a bit closer to the player.
To do what your line of code does with a VRChat constraint, you would set AffectsRotationZ to true and set AffectsRotationX and AffectsRotationY to false.
As I mentioned earlier, VRChat constraints and Unity constraints aren't built to the same interface. That means you won't be able to just use the properties from Unity constraints with VRChat constraints - they aren't named in the same way.
There is no official API documentation for the types in avatar dynamics at this time. If you're using Visual Studio, it should be showing you a list of properties you can use whenever you press "." as you type the line out.
Oh! I've gotten used to ignoring that because it's always in my way. Thank you!!
Where can we have a in-depth chat about the video players, in particular the AVPro player? They all map (as far as I can see) to a common base class so which video player is used (for basic things) shouldn't matter. Yes I am aware of the wrappers and that AVPro supports streams. I'm using the AVPro player for now and I don't want to rewrite things particularly if afterwards I find that similar workarounds are needed.
I have all the basics working and some of the semi-advanced but I'm puzzled by a few things and can't find any docs that explain the expected behavior. Looking at sample and disassembled code isn't revealing much.
Two things stand out as problematic at the moment. The first is that later joiners actually have the video player start because there is no way (it seems) to intervene. The URL as been set and though the video has ended late joiners don't know that. There is no way (I can find) to set the URL to an empty URL to prevent this.
The second problematic thing (and I can post the error message if I reproduce it) is that IsPlaying throws an exception as the player exits. I have this checked as part of my video sync code. The player object does not return null, the local player is still valid but IsPlaying throws the exception. A quick check indicates this is a VRC wrapper method so it appears that it is (probably) not checking the underlying object. It may be null at that point but I can't get to it.
I'd happily start a DM chat with folks interested in the subject.
Seems like a good reason to have "discussions" activated on this server. Maybe it is and I've missed it?
"throws an exception as the player exits" exits, as in exits the instance?
Yes during testing I have a player join late with VRC Quick Launcher. When I shut down the instance it throws an exception during the Update method. It doesn't affect anything as the player has left but it should be able to be resolved. I check if the player needs to be sync'd in Update. The Update checks to make sure the local player is valid, if the videoplayer is null in which case it doesn't call the sync code. It was calling it in any case which made me thing that the "Udon" video player is not null but seemingly the baseplayer is. And I draw that conclusion because I also check if the videoplayer.IsPlaying is false. Now it would be true in many cases when the player leaves but it isn't the attempt to sync that fails it is just checking if the flag is set.
I'm trying to set a Boolean when the player leaves which (if set properly) should bypass the need to check much of the other stuff. But again all the extra work shouldn't (ideally) be necessary. It seems clear that the wrapper code around the video player isn't doing too much. It serves as a way to restrict access to some properties.
The reason for the IsPlaying check is clearly because any sort of video sync doesn't need to run if the video isn't playing.
There is another thing I don't exactly know. But I assume that I need to control the video sync. Again some properties/methods seem to exist but I can't get to them. So some video players may be able to handle it automatically (maybe AVPro does) but I don't know. I recall the video used to "stutter" for some players which I determined was constant attempts to sync the video and lots of mini adjustments. So I added some logic to let it get a bit more out of sync before bothering to correct it.
The AVPro folks seem more than willing to provide advice but they can only help with their component and the VRC implementation is restricted.
I'm checking out various articles and the source code to some implementations. One idea that comes to mind is that I could disable the video player (perhaps) until the user has joined and I have control of things. Similarly I could perhaps disable the player upon the player leaving and I could insure that the player reference was null. I'm still looking for the cleanest option. I added support for vertical videos the other day which I'm happy with. And I monitor for OnVideoEnd so I can display a nice graphic when a video isn't playing.
The way protv deals with this is when the owner data gets deserialized, we check for a couple states and if the owner isnt playing, we just dont try to load the video. Anytime a video is loaded or the play state is changed, we do the same state checks on deserialization for if the owner is playing something and either resume the current video or load the video if it is different than what is tracked locally.
I havent been able to figure out a reasonable guarenteed way of stopping this from happening. I've attempted mitigation checks like various isvalid and null checks, but it seems that due to some destroy order of operations, trying to check for existence of the backing video engine doesnt work because the proxy component that we are allowed to access still exists, but the backing engine does not. So the only way yo know that the object is destroyed is to attempt an api call (like isPlaying) and have it kill the udon behaviour, which obviously isnt recoverable.
I appreciate your response. I will try a few more flags and checks. I can "expire" the UDON sync value on the URL which should curtail it starting via the last URL. The next "video sync" (we have too many sync words) should be able to see that a player isn't currently playing it and start it for them.
Wouldn't try/catch be nice 🙂 I'll let you know if I find something reasonable that works.
if only 😭
Well IsPlaying appears to be a bit more broken than I expected. Granted I could be wrong but I figured it was intended to reflect the state of the underlying videoplayer. Even after the video has ended videoPlayer.IsPlaying returns true. So it appears that we cannot trust it to report things correctly. That seems to leave us with setting our own bool as the only option. Ah let me check that it at least returns false if it has never played a video. Good news it is false if it has never played a video but that doesn't tell us much as it never becomes false again and it is read-only.
Yea, unfortunately it's not a great indicator. It basically means "Is there a video loaded that isn't paused?"
When you call Stop on the video player that should make isPlaying false, but it also unloads the current video. Something to be aware of.
Thanks again for this chat. I'm a bit surprised given how popular video players are that there isn't more chatter about workable solutions.
So the following seems valid for pause behavior
private void PauseResume()
{
if (_videoPlayer.IsPlaying)
_videoPlayer.Pause();
else
_videoPlayer.Play();
}
As IsPlaying means loaded and not paused 🙂
The following is however not reliable
private void Stop()
{
if (_videoPlayer.IsPlaying)
_videoPlayer.Stop();
_isVideoLoaded = false;
}
As I now know it may be paused in which case it does not stop and my flag sets incorrectly.
An IsLoaded flag would be nice...
I have to rethink a few more things and probably rely on syncing state myself. Right or wrong I'd like all the players to agree.
Are you using the OnVideo* events?
Yes I have overrides for them, mostly logging at the moment. I can use them to set local values so I don't need to sync them of course. I'm getting closer 🙂
I believe I still need to communicate to new joiners that "you may see a url and can hold onto it but don't play it". One thought was to call Stop when in OnVideoEnd but I assume that stops it for everyone and some people could have a few sends cut off the end. Probably not the end of the world considering it has been syncing repeatedly while playing. That should resolve the issue of a late joiner running it after it has ended for everyone else.
it only stops it locally.
Oh...
All things are local for video players. As an udon dev, you have to handle syncing.
Well I actually prefer that. I'm going to rename my isVideoLoaded to isVideoReady along with other fixes. May as well set a flag with a name related to the event to reduce confusion. Thanks much.
I have player state syncing in place I certainly pass it along to the other players.
As the ProTV dev I can imagine you don't want to give away all your hard-earned knowledge but if you don't mind a few questions directed your way from time-to-time I'd appreciate it. I might be able to assist in some way with your dev efforts at some point. If you prefer them public I can post here if you prefer private I can DM you. At the moment I'm imagining the OnVideo events as a sort of (odd) state machine. They aren't "current states" but events of course but a state can seemingly be inferred. I'm going to have to watch the logs a bit on this...
ProTV is fully open source. No secret sauce aside from the mental map I've built up over the years.
That's a type of secret sauce 🙂 Reading code is always helpful but exchanging info can answer the "why" and maybe even the "how about this" type stuff. I often describe a solution to a developer friend of mine just to get feedback. "Sounds good" is always nice and "what?" means I should probably rethink things.
someone I knew at university would often look at my code and just point and go "what?" and walk away. It was surprisingly helpful.
Self-evident code is good code. I've asked some professional developers why they did something and they said they didn't know but that it works.
pro developer here - I hate that.
lmao I wish I had a friend like this
Nice info
https://blog.jetbrains.com/blog/2024/10/24/webstorm-and-rider-are-now-free-for-non-commercial-use/
Oh heck yeah! Super excited about that
This is unrelated to that, but does anyone know if there's some kinda way to download thumbnails given the avatar ID? Trying to make some stuff for a friend's world and want to be able to make avatar graphics using that (in the editor)
What might be the suggested way to render a canvas only in front of a single other thing like the ground, while at the same time keeping other objects on the same render queue priority as both the ground and the canvas?
I'm wanting a set of per-player canvases in the world that follow each player and displays some stats on them. I want the canvas to be positioned below ground so as to be out of the way (nameplates and their and arbitrary avatar heights above the eye point are problematic), which means in order to see it I need it to render in front of the ground. Not a problem, render queue can handle that by raising the priority of the canvas or lowering that of the ground.
At the same time, I also want other objects passing in front of the canvas (players, non-ground objects) to obscure the canvas. Also not a major problem, solvable specifically by just lowering the ground render priority.
The added complexity is that I also have objects that can rise up from and descend back down underground, and I also want those objects to be rendered in front of the the canvas, but with the same priority as the ground so that the parts that at below ground are obscured.
What might be a recommended way to go about this? My first thought is that I could have the partially underground objects simple change render queue order during the time which they are descending to match the ground, but that seems less than perfect given a canvas on the far side would switch visibility abruptly as the object's render priority changes.
Not intending to bother you but I wanted to say "thanks". I figured out I was using a very optimistic video sync scheme which had plenty of leaks. It seems to be working solidly now and I've eliminated the immediate startup on late joiners when the URL was set but the video had ended.
any tips or templates for syncing events in vrchat world and external software data(biosignals,...) for experiment setups?
OSC for external -> internal, log file scanning for internal -> external. Here's an example of an external software project that utilizes both the above: https://github.com/ChrisFeline/ToNSaveManager
I copied
Thank you. It didn't like my message, even when it was just the VRC wiki link Q_Q
yeah, link embed be....yeah
Ok thanks @coarse cave
Would be nice if we could give auto mod a reason that it could post about why it was removed (e.g. embeds are not permitted)
Users logs in my world are being spammed with this message, any ideas what may be triggering it?
RenderTexture.Create failed: depth/stencil format unsupported - D24 UNorm S8 UInt (92). There is no compatible format on this platform or this fallback to a compatible format is disabled in the import inspector.
It doesn't seem to reference a specific asset so I'm not sure what's causing it. A render texture perhaps?
Search for t:RenderTexture in your Project tab and check Enable Compatible Format on the assets
Thanks. Rogue one must have ended up with it disabled for some reason.
Looks like its AreaLit causing it. Hopefully enabling that doesn't cause other issues.
did something change with User-Agent headers?
I was under the assumption that PC/VR and Quest(+ IOS and Android probably) had different user agent headers when using a video player
I tried both AVPro and UnityVideo style players (ProTV and U#) and I get a Win64 header for both
am I completely missing something or was this removed at some point
PC
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.115 Safari/537.36
Quest
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36
Haven't checked it for a long time but the user agent used to be either stagefright or AVProMobileVideo for Quest users
I dunno if it's different for regular Android users
Looks like it's still working, I see stagefright/1.2 (Linux;Android 12) in my web server logs from today
are you using https?
Yep
I'm extremely confused
gonna chuck it on my server since that has https/tls certs and see if it's that
seems like it's a TLS/SSL/HTTPS thing
I pushed it on my server and I get
AVProMobileVideo/2024.4.1-1533-fff0238e2a-Release (Linux;Android 12) ExoPlayerLib/2.19.0
wack
so NSPlayer is PC and AVProMobileVideo/stagefright is quest?
Yeah
many thanks
Kinda bumping this - just wondering if anyone has any answers for the best way to go about this?
I just need to get the URL for the thumbnail, given an ID, since I want to make a script that downloads the thumbnail and applies it to a texture, kinda like how a pedestal would.
You'll likely need to run a server to gather those. And it can't be automatic, constructing arbtrary URLs isn't possible so you have to ask a user to put it in.
Anyhow, you need to be logged in to get access to the thumbnails the proper way, which is an annoying hurdle, but very understandable.
You could however also run a discord bot that pastes in the link to an avatar in discord and then gets the image from the embed, not the most reliable solutions, but it would work without auth.
Also disclaimer, read through the ToS or guidelines before you release anything like this, I am just thinking out into text, but have no idea if VRChat is fine with people doing things like this.
I'm adding a physbone script to a transform via a prefab, but I need to include an updated Ignore Transforms reference. Is there any way to get in to the phys bone script and add the updated reference via editor scripting?
Like, currently I'm copying and pasting the phys bone script from a prefab, onto a project avatar's transform. But it comes over with broken/not-updated Ignore Transforms references.
GameObject physBoneClampedXRotationofHipsPrefab = (GameObject)AssetDatabase.LoadAssetAtPath("Assets/AnyTaurScript/Phys Bone (Clamped X Rotation of Hips).prefab", typeof(GameObject));
Component physBoneClampedXRotationofHipsPrefabComponent = physBoneClampedXRotationofHipsPrefab.GetComponent<VRCPhysBone>();
UnityEditorInternal.ComponentUtility.CopyComponent(physBoneClampedXRotationofHipsPrefabComponent);
UnityEditorInternal.ComponentUtility.PasteComponentValues(physBoneClampedXRotationofHipsComponent);```
There's editor script to make a button that changes focus to this transform to help people find it and update it, so I guess I can just do that, but it would be cool if I could just update the reference directly.
The last thing I need to figure out how to do is set the "Free Edit" tickybox flag via script, so that if I do a negative constraint weight via script, it will be accepted properly. Other than that, I think I'm good...
Hey did anything change with how VRC handles 3D textures? I'm working on a volumetric fog system and it's completely broken after a vrc update.
Issue only shows up in VR it seems
AnyHindChest.GetComponent<VRCRotationConstraint>().Sources[0].Weight = 0.0f;
The above does not work; is there any way to grab the Sources by index and change their properties, after they've been added to the list? What would the syntax be for that? I've tried to do some generic List type stuff to try to iterate through my list of Sources and change all the Weight properties to 0.0f but I get errors about keyable lists. So I figured I'd do it by "hand" but I can't figure out how to do that either; I've already added all the sources I need to my constraints, now I just need to be able to swap between them in Edit mode, like I was able to do with classic constraints.
The various workarounds I can imagine all seem really stupid (setting the avatar up with a special set of animation controllers just for Play Mode setup, and having people... write... numbers down...? to enter manually later?) (using Classic Constraints at first for all the initial setup and calibration, then saving user values from that and removing all the classic constraints and replacing them with vrc constraints with their user values?).
VRCConstraintSource source = constraint.Sources[i];
source.Weight = 0.0f;
constraint.Sources[i] = source;
VRCConstraintSource is a struct type, so it's copied by value, not by reference. You need to get the source, then modify it, then write it back to the list. This is how it works for all collections of by-value types in C# as far as I'm aware.
Free Edit is an editor only toggle that just affects how the property is drawn in the inspector. Assuming the constraint isn't shown in the inspector as your code runs, Free Edit should be set automatically based on whether or not the value is in the range 0 to 1.
Thanks, that’s perfect! I’m really grateful for your responses.
outta the blue, but does anyone know how I'd be able to go about putting a VRC_AnimatorPlayAudioEditor on a state in an animator via script, with set serialized fields? I'm building an automation tool and have everything set up to that
on the upside, I still have options...
manually having the script paste line-by-line until it fabricates a file from frankensteining (It wouldn't be the first time I've hadda do this) ;-;
well, technically I didn't have to. I didn't know a library existed and basically reinvented the wheel for it by frankensteining a txt doc 😛
correction from what I've gathered: VRC_AnimatorPlayAudioEditor is saved in an external log for what states use it; It's not an actual behaviour... which means I really am at a loss for where I'mma access this thing because I can't duplicate it -_-
How can I get more information on what commands and syntax I can use from having added these namespaces (using VRC.Dynamics, using VRC.DSK3.Dynamics.Constraint.Components, etc)? My hover tooltips seem irreparably broken, even after attempting to fix the dot net issue a few different ways, so I can't hover over anything to get additional information. When I tried selecting and right-clicking to get definitions, that didn't work either (no definitions were ever found, even for basic non-vrc things).
I've seen screenshots in here of what looks like "source code" of the new stuff, where the new functions all seem to be written out. I would love to get a look at that. Do I try to figure something out like installing dotPeek to decompile something something (seems like a bad idea when my computer track record is not great)? Is the reference code I want to look at present in the SDK in my Unity project somewhere? It didn't seem to be last time I tried to search for it.
I'd really like to be less helpless, but because I don't know the precise syntax for changing the top-level constraint weight (not source weight--thank you! that part's working), I can't make any progress at all. I'd really like to know where everyone else seems to have gone to figure the new things out without asking after every little thing. ^^;; thanks!
So, update on the adventure: Prefabs also don't work super reliably for my use, but most of the time they work
My generation script works now, only needing 1 additional manual step to edit the audio controller.. but sometimes it also will just crash unity and/or break my animator which I'll need to re-generate or reopen
update further: I wasn't including VRC.SDK3.Avatars.ScriptableObjects 😝
that might help clear things up a lot.. now to use it to unravel some spaghetti
A friend whose Intellisense IS working helped me with everything I still needed. 😛
One of these days I need to figure out how to make that work for me, the lack of useful docs is annoying for those of us who don't use Visual Studio
Has anyone noticed (in the last few days) that YouTube players tend to not play HD videos? There was a system failure about a week ago and since then the videos play again (in many worlds including mine) but they seem considerably more fuzzy than I remember them. It is very noticeable which makes me wonder if some setting needs to be updated to restore the video quality. I'm not the only one who has noticed this.
phase be really quick....
My patch/method for 1080 broke because YouTube added Auth required to the 'mediaconnect' client, I have another method but haven't got around to testing + bugging pi to implement yet
I read the messages but I'm not familiar enough with the mechanisms that surround video streaming. Is there a "recap" or might you generate one that explains a) what was the case and b) what the case is now? I'm trying to understand where the problem lies at the moment. The Quest headset, VRChat, any Unity video player, non-authorized YT media requests? Is it the case that we are expecting 1080p and receiving 720p (or less)? Thanks.
Ok I found a notice on YT-DLP issues re: mediaconnect requiring a sign-in which seems to limit users to "pre-muxed" 720p or better streams. I've not used the word muxed in a sentence before 🙂
360p is the highest premuxed video VRChat can use now, FYI.
Hence why they look awful.
I'm still hoping there is a place people can get a "recap" as opposed to a long thread with many of the same points posted over and over. So let me ask, "you mean via YouTube right"? Is anything that VRC uses for video feeds limiting 720p videos from other sites?
And I have to assume that YT didn't delete or otherwise remove hi-res videos. They have limited access to them if I'm reading things correctly. So can such access be "gotten" meaning via a license or something?
Correct, this only referrs to YouTube. VRC can load videos of much higher resolution from other places, or straight media loading. e.g. 4k or 1440p. This is an issue with yt-dlp, how YouTube serve content, and the capabilities of the VRC video player internals.
The issue is that while lots of different qualities exist on YouTube's side, VRC due to limitations in the video player engines, can only play "premuxed" videos, premuxed being where both the video and audio exist as a single package. Normally (e.g. via the website) YouTube serves you the video and audio separately and syncs them in the browser.
Excellent thanks. I'm going to look into viable sources of videos other than YouTube just to have some nice videos to play.
I did see all the format combos while "playing" with YT-DLP and inspecting the results.
So here's the output of yt-dlp for a random video. I've highlighted the only one that VRC can play (as it's the only "combo" premuxed one).
You can make your own system to work around this somewhat. e.g. I've made something that I can use where I put my domain and the YouTube ID, my server grabs the qualities I want (1080p 60fps and the best AAC audio) remuxes them together then serves that seamlessly as though you were normally watching YouTube. Only adds a few seconds overhead.
Thanks. So YT removed the premuxed versions of videos with higher resolution figuring that browsers can still get them right?
I was thinking about that. There will doubtlessly be services and I host my own server and could (conceivably) do something similar if push comes to shove.
Yes and no. They removed 720p a while back when they got rid of the native Android client. The 1080p disappearing now was due to a workaround that was being used - it turned out if you spoofed being Safari and used a special mediaconnect feature, it would let you have a 1080p premuxed version. YouTube now require authentication to use that mediaconnect functionality, which isn't viable in VRC so they had to remove that tweak, losing the 1080p one we gained a little while back. So now we're down to just 360p.
That clarifies some of the messages I was reading about Safari and such. Does it sound like something that VRC could license? In other words can they provide mediaconnect credentials (assuming YT would offer such a thing)?
I highly doubt it, I don't believe anywhere else has that functionality and it would likely cost VRC a small fortune licencing for what... 4 million or so users a month? It would also require YouTube to start injecting ads into the streams (or require VRChat to display the adds in some other way) which becomes a logistical nightmare.
I don't tend to guess at costs, but that's me. We can see the cost per user for say Visual Studio, Unity, Blender, etc. Arrangements can be made if there isn't a technological barrier. And "just saying" an ad doesn't have to be 30 second video. Google/YT could simply promote itself and its services each time a video played. It doesn't have to be horrific.
Google wouldn't want to just "promote themselves" they'd want their normal ads injected and the reason it would be a nightmare is how do you sync that, when each video is now a different length due to different people seeing different adverts?
Not to mention VRC would somehow have to make infrastucture to handle this, with YouTube who I doubt would be interested.
if people can recommend alternative repositories of videos now would be a good time to mention them
Vimeo used to be viable but I think they only provide split streams now, so that's outright unusable.
I don't work for Google and I'm not in marketing or advertising. I know what I see and I can watch PBS over the air for free. Where there is a will there is often a way.
Dailymotion seems to be a viable alternative.
ID EXT RESOLUTION │ FILESIZE TBR PROTO │ VCODEC ACODEC
────────────────────────────────────────────────────────────────────────
hls-380 mp4 512x288 │ ~ 10.05MiB 461k m3u8 │ avc1.4d0016 mp4a.40.5
hls-480 mp4 848x480 │ ~ 18.24MiB 836k m3u8 │ avc1.64001f mp4a.40.2
hls-720 mp4 1280x720 │ ~ 46.89MiB 2149k m3u8 │ avc1.64001f mp4a.40.2
hls-1080 mp4 1920x1080 │ ~102.68MiB 4707k m3u8 │ avc1.640028 mp4a.40.2```
Excellent. If you and I can then surely someone else can provide muxing services and charge a reasonable rate. Not videos obviously but we can see services like Shadow PC (and others) exist. If there is a market customers will follow.
The AI bots for instance. Basic service is free, customized services are available for an additional fee.
Need to be careful when your charging for a service specifically to breach another company's ToS though...
Agreed. I'm not a lawyer but being careful is typically a good thing. The AI use-cases will be in court from time-to-time.
So... this is a starting place: https://en.wikipedia.org/wiki/List_of_online_video_platforms
Online video platforms allow users to upload, share videos or live stream their own videos to the Internet. These can either be for the general public to watch, or particular users on a shared network. The most popular video hosting website is YouTube, 2 billion active until October 2020 and the most extensive catalog of online videos. There are...
When I investigated video repos (a couple of years ago) it was hard to find any that offered "direct to file" paths. They mostly used id-based systems and I offered to pay for direct access. Some also run thru their own player which obviously won't work in this case either.
I mean, most VRC users aren't going to care about other platforms, they will just want YouTube to work and that's it.
Well they are stuck aren't they? I don't intend to be stuck if I don't have to be. You posted that 360p is the best we get and nobody has an interest in improving it. And anybody who does may breach another company's TOS. I am doing what I can given the current circumstances.
So do you know if we are limited to specific formats? Will .webm or .ogv files play on the headset? I'm doubtful.
AVPro supports most formats and containers. Unity is very limited, so it depends on the engine the video player in the world is set to use.
MP4, MKV and WebM all definitely work on AVPro, not tried OGV but likely does.
Thanks again. I'm going to try out a few test videos to see if I can get any hi-res video to play in my world. If so I can easily generate a favorites list which I can already feed into my video lookup system. Not as flexible as searching YT but if there are 100s of videos to choose from it won't be completely dead.
Once again. It is still possible to get those formats from YouTube, the work around just needs to be updated
Where are you seeing a workaround mentioned? I'm not finding it on the yt-dlp github.
I told you multiple times I already have one
And it is... what? Seems weird that it's not being pushed back upstream.
Because its just arguments? there nothing to push upstream
I already pushed everything upstream the last workaround (mainly m3u8 fixes for youtube)
https://github.com/yt-dlp/yt-dlp/pull/9546
https://github.com/yt-dlp/yt-dlp/pull/9875
basically you just switch from mediaconnect -> web
and it works lol
mediaconnect was nicer as it had more relaxed bot checks though
1080p goodness
A lot of "speaking in tongues" seems to be going on. We aren't dumb but we are not all experts in video formats, etc. So, I'm seeing what looks like a merged PR from June 20th. So does this mean that the current version of yt-dlp can handle it? And does that mean we are just waiting for VRC to modify the command line when they call it? Is there anything we can do, either independently or to push VRC to make what seems to be a simple mod?
Yes we are just waiting on vrc to modify the arguments for calling it, its hard to handle in the exe itself due to how easy it is to break the legacy player, vrc calls with two sets of arguments, one for avpro and one for the unity player because of this
That sounds encouraging to me
Also @coarse cave possible bilibili hack in ytdlp :3
can only get 360p but its betteer than [video error]
xd
one day....I hope nicovideo start working again....
well its more like 640p, bili has weird formats
yeah...it's....unusual
whats up with nico?
Also i can't test if this works with the higher bitrate stuff as its all login restricted
seems vrc stripe wrong code so something seems missing.
and chinese site = pain
mhm send me example url~
I just pick random.
https://www.nicovideo.jp/watch/sm44332153
Hacky Haxy be like
looks like niconico changed their backend, no more mp4 at all
oh....now also that ic
I should see if I can make my youtube proxy more universal, could likely mux bilibili videos and whatever else
@torpid vortex ^^
That is insane indeed!
It might be worth referencing https://github.com/misyaguziya/VRCT its along a similar line llm wise but uses chatboxes and translation

One message removed from a suspended account.
Any ideas how one could use vrchats new hand tracking setup with lucidgloves?
In other words: can i use index controllers (what the gloves pretend to be) with the hand tracking layout?
any jank workaround would also be apreciated 
also, feel free to ping if you have an answer
||this is the closest thing to a hardware channel i could find so sorry if this is a misplaced message||
you cant mix inputs from 2 controller
so no
youll need to use the lucid glove controller implementation via openglove if it has one
else rip
Im not trying to mix inputs
Im trying to use the hand tracking controll sceem while i am using regular controllers
the way that lucidgloves work is by pretending to be knuckles.
So all that vrc sees is a pair of knuckles controlers (that have splay because aparantly knuckles have softwware support for splay lol)
I want vrchat to treat the "knuckles controller" in the same way as hand tracking.
not mix the two together
so you want the gloves skeletal data but the knuckles input data?
skeletal is part of a controllers inputs, same as buttons, so i sont think thatd be possible
unless im still misunderstanding
I am not using any knuckles.
The gloves are using a driver that translates the data from the gloves to make them look like knuckles to steamvr
so when i say "knuckles" then i am talking about the gloves post-translation
OH
yeah, openglove reports itself as a full skeletal tracked controlle
so vrchat will default to the hand gesture
but you can also use button inputs at the same time
so it doesnt pretend to be a knuckle?
typa shit you can misss in one year of ignoring a dead project
itll pretend to be a knuckle still
just because knuckles have the ability to do every skeletal gesture so games support that
you could modify the driver to be a different controller type, but it doesnt really matter much since knuckles have the most inputs too
you could also create your own device™ but thats undocumented (steamvr drivers arent documented at all anywhere officially)
now that you remind me of that, nvm im very happy I dont have to fiddle with the driver
I mean i still will but i dont have to
for driver stuff i just ask my bf cuz i am stuoid and dont want to touch it with a 10 ft pole
oh yea i wanted to tell him about it anyways, thx for the reminder 
struggling to type and discord bug cutting of the last word is killing me
why lucid glove tho?
im assuming its not the pulley thing that was done
but rather a different and more accurate sensor?
why not
fairs
hall effect as in using magnets and coils to calculate relative distance from palm?
or hall effect as in hall effect potentiometers
that
ah thats what higvr is doing i think
i cant quite tell tho because theyre so ambiguous
so it could be imu but just weirdly describe

If were including buying gloves as an option in the "why lucid" then the asnswer is because foss on top
well
foss
lol
ehh
idk openglove is good as a shitty boilerplate and thats it
every glove driver does it for the io part, and change everything else
arch user:
no, im saying thats a very arch user statement
openglove has a lot of latency in how it handles a lot of stuf
and also forced itself to have a really high controller priority
requiring you to restart steamvr to change controller
well thats not boilerplate, thats just bad cod- its bad prac-...
well its just bad.
anyways, that just means i get to f with the driver 
boilerplate with lots of rust, screw holes in the wrong spots, and missing an arm
i wish you luck
an environment consisting of hazards that i am protected from with M3 tape and hotglue is my type of environment 

🙏
i use magnets personally but slay asf
real tbf
my vive trackers are something to behold
held together with zipties, tape, and hopes and dreams
this has a battery physically 3x the height of stock, so i needed to not put pressure on it so needed a new housing
ive asked vive for 3.0 housing cad files but nothing as of yet
someone there is banging on some doors for me tho :3
life as a vr enthusiast:
real
ask lumen
hes got every vr 3d model in the world
i bought a joblot of faulty headsets and there was a lens modded og vive
he gets them from me. i have quite a few files under contract too
under nda contract?
not nda, just not allowed to distribute
at least not for 2 years from signing
someone at vive told me cad files are usually nda so if i do sign one idrm
since this is a personal project
"oh no i got hacked an lost the files!" (jk) (unless?)
what are you cooking?
dunno how i survived my time spent soldering directly to 18650s
but im cheering for you 
rip their capacity
also makes them a solid ammount more likely to just kaboom randomly
which is rather subopyimal when youre supposed to be wearing them 
based
i soldered a new bms to a lipo and the capacity substantially droppe

i sure do hope this battery does not explode whilst i am using it
heatshield would be advisable
would also double as a ballistic shield bc batteries dont have enough power to blow anything up (except humans lol)
Chances of VRCs build of yt-dlp including the "--cookies" option, so folks in need to use a VPN with VRC get to supply their cookies for youtube?
Asking to find out if it would be worth putting in the time for a feature-request. ^^
Why would that be a good thing?
bc youtube forces you to login when you come in with an IP they've tagged being from a hosters/vpn-providers metwork and thus break youtube-videos for all vrc video-players
i.e. if the host of the instance is using a vpn, that instance cant use the video player for youtube videos?
not the instance, its a per user thing... but yes
thats as far as you get when using a (selfhosted) VPN
From what I have heard from yt-dlp and related projects relying on it, you would just be risking your google account by using its cookies with yt-dlp.
ooof, ok thx for the info... was news to me
I've been using cookies with mine for a year or so now with no issues. I keep hearing people parrot this without anyone providing actual examples of it happening.
Alright, that is good to know, I imagine it isn't something tested much since loosing ones google account generally is a very bad state to be in.
My hands aren’t working
dropped an issue on your repo ^.^ https://github.com/lolmaxz/vrc-ts/issues/29
One message removed from a suspended account.
ah nice! one other thing i noticed is in the docs it says you need to restart the program to authenticate with totp, is there any way to avoid this if its set in the constructor?
because with my setup i cant use the cookie file
One message removed from a suspended account.
really should make the two-factor code dynamic parameter to an function instead of hardcoding it to a file
i already know the totp code when im initalizing the api
One message removed from a suspended account.
One message removed from a suspended account.
Strange question but does anyone know what Endianness VRChat OSC uses? I'm developing an FBT solution that allows for tracker position data to be sent via OSC, and I'm using OSCPack, a C++ library, but it requires me to know the endianness of the bytes sent over. Would be helpful to know so that all my work thus far isn't for naught
It should just be network order?
oscpack seems to be 10+ years old too?
Oh shit yeah I'm just now realizing this
I might make my own C++ implementation for OSC then
Why not just use osccore?
There's this too https://github.com/ChrisFeline/VRChatOSCLib
@final tiger you got the link to the maintained one?
That's for C#, once again, I'm using C++
Seems incomplete
But should work for sending data
Yeah sending is all I need

Trackers, all they're doing is sending floats forth, so it should 100% work for my use case
SlimeVR does this already, if you wanted to look at a working example
Oh god they used Java...
Yeah I'm not getting a lick of anything from that then
yeah there's a bunch of Java in that project, I'm not a big fan either.
One of the reasons you're probably not gonna see a lot of c++ trackers is because c++ is the language used for writing steamvr drivers, so most people who write c++ just do direct drivers. Osc for trackers is just a compatibility layer to make it easier, supporting many languages, over the network, and outside of steamvr
Yeah, my only issue was specifically finding an OSC library that was easy to set-up and didn't involve me adding 39 different files through Visual Studio, so I've decided to just switch to C#, since I know the language better I can optimize it more
So yeah my C++ remarks are invalid now lmao
Yeah there are a ton of c# osc libraries
But yeah this software is what actually processes all the tracker stuff, the trackers are only sending camera and IMU information to the host device
Ooh implementing your own SLAM? Tbh I can see why you'd want that in c++
It'll do more than just trackers however, it'll add a couple extra things that VRChat doesn't have but would be interesting to see, like jumping IRL triggering a jump in game
ooh that'll be fun
Indeed
Got the inspiration from Vivecraft lmao
There's a whole lot of things I've got planned
This is gonna mainly be an accessibility thing, FBT is just a part of what I consider accessibility
wouldnt be too difficult to do
I know, the trackers are the most difficult part
wouldnt need fbt technically since you can just use the headset height
Yeah, although if they're using it on Quest standalone it will need at least a chest tracker
not really since you can calibrate the standing height then go off that
You can get headset height on a PC using Quest Standalone?
not sure about standalone but vrchat has a parameter that is your headset's vertical axis
its how it knows to switch to crouch and prone
yes and no
The way I plan on doing it is probably different than most other applications, it's gonna rely solely on headset height and whether or not the feet trackers or in front of or behind the headset
/tracking/trackers/head/position
Tbh since idk which is the best channel asking for help for my situation . I posted information regarding my issue in #avatar-dynamics message . If anyone would like to check it out.
Once again back at it! Where is the documentation for the VRChat API? I wanna do something similar to VRCX, just not as involved as it, maybe just seeing who's online and being able to join them easily and was wondering where the API docs were located, if they were on the VRChat site, a different site, etc...
yeah.... there's some basic stuff on the website, other stuff is apparently tooltips if you use Visual Studio or something like that. I've mostly dug through other code to work stuff out.
There isn't any official ones, the closest you get is the community project
ooh, bookmarking this
One message removed from a suspended account.
thank you !!!
Wasn't sure where else this would fit 👀
I love the idea of the app, but it requires a specific version of glibc that is different from the one on my machine. Any chance to statically link that library?
You could grab the source and build it yourself
Thanks. If I get curious enough about it I may do that, but a quick look at the github Installation section shows a tree of prereqs rather than a "clone and build".
yeah true, but there's not really another option
what editors are people generally liking for C#/Unity development? Visual Studio, VS Code, Rider? Im on day 1 just starting out with VS Code but idk if there's something I'm missing with others
I use visual studio and the intellisense and debugger are good. Although debugger's not usable for U#. Moreso for when I worked on stuff outside VRChat. Also it handles shader code well, which I recall having trouble with VS Code plugins for a few years ago. Downside is visual studio is a bit slow and some of the default hotkeys are clunky compared to VS Code, especially multi-line editing and commenting.
Although debugger's not usable for U#.
You can use the debugger to debug the C# logic of an U# script as long as it doesn't use anything that's only available at runtime.
For example the local player or persistence afaik can't be debugged this way. You can also set up unit tests to debug parts of your code that can be ran in-editor.
I like to write a lot of my code as static functions because it makes it easy to unit test in this way.
Who would be the "goto person" re: discussion about VCC? In particular I would like to know what is executed (particularly if I can access it) in the create menu when using create U# Script. I have a nice enhancement for it but I'd like to see if it is practical. I'll talk to the Alcom group as well.
Ah, reading discussions on vrc-get suggest that it may be implemented there already. In any case I'd like to mod VCC if that is possible somehow to get the same functionality. The issue is this. A U# script can be generated from the menu. It creates the C# and an asset file (as we know). While this method supports a template file it apparently only supports the default "single template" system. I learned today (and it works) that Unity supports custom templates. I can add one for U# but it won't (obviously) execute the steps needed to generate the asset file.
The benefits of the custom template system should be plainly obvious. We get multiple templates to use (that we can customize) and they can be checked in with the project.
@glacial yacht
Hello gang! i quickly pieced together a editor tool that lets you mass produce Animations
how to use
- Download this file and drop it in your Asset folder (or elsewhere in your project)
- Select objects you want to make an animation for
- Go to Tools -> bulk animation tool
- The source clip is the clip thats being referenced, the animator is (most likely) the runtime animator in your avatar.
- Press generate on the bottom of the window (if more than like 35 animations are selected the list gonna be too long)
Now that there’s headset camera hand tracking, are hand tracking floats (finger spread, etc) accessible to the animator controller at all? Maybe over OSC? I can just use the double openhands gesture I guess, but it would be cooler to get the “alive” look of using hand tracked finger spread directly.
I need some help with hosting events. I have some artists, like DJs and singers, who will be performing. How can I capture their audio? The performances will be live and recorded on video player, if that makes sense, so people can join from any instance.
The performers should ideally send their audio directly to you/whatever is mixing it all together, running it through VRChat will just degrade the quality a lot.
So
Performers->mixer (your pc or whatever)->live stream
On how to send it to whatever is mixing it all together, donno, there are likely dedicated programs out there for audio streaming, alternatively just have the performers use OBS to stream the audio to you.
And just to mention, while capturing singing is doable from just inside of VRChat, music does not survive VRChat's voice audio system unscathed, so you will need something like this for DJs at least.
Alternatively the way that doesn't require as much technical knowledge, all DJ performances are pre-recorded, which some events do.
And you capture singing in game, with a bot that can only hear the performer. (I haven't heard the effect personally but there is a function in udon to turn off the audio filter meant to make speech easier to hear, that might make singing better.)
This bot would also be a good choice for camera, while you could record video on your own account (assuming you'll be on at the event) you couldn't properly record the audio.
Some singers mix in a backing track or instruments like guitar with voicemeeter. And then use that mix as their VRChat mic input. Which keeps voice in sync with music. But not the nicest audio quality and instruments cause their visemes/lip sync to move.
Anyone knows what command is passed into yt-dlp by vrchat?
Depends on if it's the unity player or the avpro one, it should be fairly similar to this however https://gitlab.com/techanon/videoplayershim/-/blob/release/Editor/PlayModeUrlResolverShim.cs?ref_type=heads#L206
Can you create worlds and avatars on macOS?
sorry if this is a frequently-asked question, but is it possible to hook the Unity profiler into the game client instead of checking that in the editor?
anyone have simple examples of an avatar build hook? It's hard for me to figure it out based on https://creators.vrchat.com/sdk/public-sdk-api and https://creators.vrchat.com/sdk/build-pipeline-callbacks-and-interfaces/, and existing projects I know like VRCFury are way too complicated to start learning from
The VRChat SDK provides a set of interfaces and methods you can use to enhance your world and avatar build process.
I have a thing which looks basically like this:
using System;
using UnityEngine;
using UnityEditor;
using VRC.SDKBase.Editor.BuildPipeline;
namespace Me.MyStuff {
[InitializeOnLoad]
public class AvatarBuildHook : IVRCSDKPreprocessAvatarCallback {
public int callbackOrder => -1025;
public bool OnPreprocessAvatar(GameObject avatarGameObject) {
var myHook = MyHookThingy();
if (myHook == null) {
return true;
}
try {
myHook.DoStuff(avatarGameObject);
return true;
}
catch (Exception e) {
Debug.LogError(e);
return false;
}
}
}
}
#endif```
this worked, thank you. now where is OnPreprocessAvatar actually documented lol, the 2 links I mentioned show something completely different
I forget, I probably dug it out of some source or something. Most of this stuff isn't documented in any sane way
I wrote this about a year ago
Nop
:c
Could someone explain what "signature" means in the context of the Create File Version [POST] and Delete File Version [DELETE] sections of the VRChat API documentation?
I couldn’t find any mention of it in the Create File or Show File sections, and I’m struggling to understand what it refers to.
checksum
Can I AddComponent<VRCHeadChop> yet? Like in Unity/editor scripting
I guess I can use a VRCScaleConstraint for now though, just wondering if there was something I need to update
Do we know when the VRC Scene Descriptor is accessed? I'd like to dynamically modify some of the values but clearly this needs to be done prior to the values being used during world loading. Also the docs indicate some properties that I don't have "forbid free modification" and stuff related to voice falloff. Does anyone know if this is simply out-of-date docs?
Hi, My name is Alicia, Nice to meet you. I'm here because I need to find some advanced creators. I need help.
Whats up?
Hey! Yay, someone reached out. How's it going? Which world is yours?
Or, Worlds, rather
I need help, major help.
I created a world, and I published it. Then I ruined it, and it is no more. So, I need to start all over, and I don't want to start over alone. lol
Also, would you mind being my friend on here? And in vrchat?
I helped build/worked on like half the clubs you see. Do you need help w something specific?
blimy, dya have some pics?
My expertise is is mostly in TouchDesigner/LiveLinking w Udon etc etc. Add me as a friend we can chat there if ya need help
Loner Online
You need to add me as a friend, because I tried on here, but it wouldn't send. Said you're not accepting friend requests.
You right I turned them off, I'll fix it
Does VRChat have some sort of guideline for balancing audio levels? Like for default setting values, what is the expected or baseline player voice LUFS, or avatar sounds or world sounds LUFS?
Because it seems almost any sound can get loud enough to clip easily whenever they get close, and I want to avoid clipping, say by staying at a certain distance, but how much is this distance supposed to be? What is the "standard in-game distance" when VRChat devs decided the built-in gain levels to make it 1:1 with the sound source?
Wouldn't it be better to release a guideline like an "expected LUFS for all sound sources", so that it is all regulated? Rather than no regulation and then relying on every player tweaking every other player's voice volume and avatar volumes (varies by avatar) and world sounds (varies by world)?
Because it seems the casual player needs to master the volume sliders just to survive in VRChat, it shouldn't be that way, wouldn't it be nice if VRChat can do it automatically by having clear specifications for audio input LUFS and/or automatically normalize recorded sounds sources to a certain LUFS (for avatar/world sounds)?
me almost every time I enter a club world
Wouldn't it be easier if there is a calibration function or wizard in the options, so people can actually test their mic and have their input volumes automatically set to a certain level, before the voice even gets transmitted
Have them read out a paragraph sort of thing
And then evaluate the LUFS of that clip, and then have the input volume automatically set
Controlled powersliding for motorcycles. I am not sure how to indicate the VR user to countersteer when they grab the virtual handles, which is just thin air irl. Either I yank it out of their hand (or they fall over by not reacting) and or have some kind of haptic and visual guide
Here is the current implementation which has the least amount of user authority and the controller is unsure of the intention of the user in the slide
Hey I have a question about build post-processors & the VRC SDK: Is it possible to change where the SDK puts the wrold/avatar assets for "build & test" by script?
I use Mac to dev, and test on my PC. I can access my PC via file-share, so it'd be really nice if I could point the SDK to the network share instead of it trying to put it on my local machine.
NVM. Whilst it seems impossible to differentiate builds, I was able to make a menu item that allows me to "Build & Export" a VRCA :D
For those curious:
#if UNITY_EDITOR
using System.IO;
using System.Reflection;
using System.Threading.Tasks;
using UnityEditor;
using UnityEngine;
using VRC.SDK3A.Editor;
using VRC.SDKBase;
public class BuildAndSaveEditor
{
[MenuItem("VRChat SDK/Utilities/Build & Export")]
static async Task buildAndExport()
{
var builderType = typeof(VRCSdkControlPanelAvatarBuilder);
if (builderType != null)
{
var avatarField = builderType.GetField("_selectedAvatar", BindingFlags.NonPublic | BindingFlags.Static);
if (avatarField != null)
{
var avatar = avatarField.GetValue(null) as VRC_AvatarDescriptor;
if (avatar != null)
{
Debug.Log("Selected Avatar: " + avatar);
if (VRCSdkControlPanel.TryGetBuilder<IVRCSdkAvatarBuilderApi>(out var builder))
{
var path = await builder.Build(avatar.gameObject);
var fileName = Path.GetFileName(path);
var savePath = EditorUtility.SaveFilePanel("Save Avatar Bundle", "", fileName, ".vrca");
FileUtil.MoveFileOrDirectory(path, savePath);
}
}
}
}
}
}
#endif
-# Just in case anyone else is using a separate machine to build from where they test
Might be able to be improved somewhat tho.
Oh that might actually be useful for me too , thanks for sharing 🙂
I wonder if we could also use that to do extra unity side checks / statistics, like iterate through things into the vrca.
Or if there there is a way to simply access the tmp directory where it stores all the stuff that goes into the vrca directly maybe ..
That way we could calcultate things that are done on the server only currently,
like the unpacked size and such.
Always a pain to have to upload to the server to check things..
I will note that the vrca created gave me an error bot in VRChat, but that may have been because VRChat was already running or I messed something up with the local build; I'm... not really sure.
It could be that Build & Test creates a unique vrca from the build function. But, if so... uh, that makes no sense, since why would VRChat offer a build function that creates an unusable asset bundle? So I doubt this one.
Someone smarter than me could probably fix it up. Was probably user error (maybe I'm selecting the wrong game object; IDK) :x
Ah yeah , difficult to know for your precise usecase of moving vrca between computers.
Maybe it needs to be declared somewhere else in the vrchat conf or something, which the build locally process is doing or something, ie the vrca copy is not enough.
Do you have the --watch-avatars launch option for vrchat ? if not try to add it, so that maybe it would autorefresh or recreate things when it detects the vrca..
Without that option, sometime I was getting the robot error too when testing locally.
That might be it actually I don't think --watch-avatars is in my command line options.
Hi! So I m trying to make a unity tool and in the script, i need to generate a game objects with a VRCFury Full Controller... I thik i saw it was public. But for some reason I'm having a hard time to do that...
To be honest I m just starting script stuff so I mainly use chat GPT to help me but I can't make it add a the full controler component... can someone help me with that or give me a direction where I can get info about that.:radiantDead:
are you sure you need to generate the full controller? could you elaborate a bit more on what you're trying to do?
I'm trying to make a my own lock system for avatars and I want it to be non destructive... so my tool will generate an animator controller inside of a vrcfury full controler component . Like that it will be automatically installed and will not conflict with any other script... I probably don't really know what I m talking about but if there are other ways to do what I want, I m open for idea and advice 
VRCFury has Security Pin Number and Security Restricted components built-in. https://vrcfury.com/components/other#security-pin-number
Is there a way to make an object and I and other player touches it, we teleport to a specific location?
Touching together is the key for my scenario.
A bit of feedback about the SDK, if people would be so kind as to direct their attention to: https://feedback.vrchat.com/sdk-bug-reports/p/bug-safety-avatar-stations-on-by-default
VRChat documents this behavior, but they seemed to have overlooked the safety implications of this, which is problematic, to say none the least.
I know. But people can easily bypass it... to bypass mine, you need to make an actual script to try all of the possibilities... and even that, my system detect it.
Gotcha. Do you already have an editor script? It looks like there's a function to add a full controller FuryComponents.CreateFullController. https://github.com/VRCFury/VRCFury/blob/33c0e3dc965effc450fb90cd69ccee944f86da79/com.vrcfury.vrcfury/PublicApi/FuryComponents.cs#L14 And the controller itself has methods to add animator controller.
In order to access those functions, you'd also need to create an assembly definition in the same folder as your editor script. And add "com.vrcfury.api" in the assembly definition references. https://docs.unity3d.com/6000.0/Documentation/Manual/assembly-definitions-creating.html
Ok tk let me try that
I was chatting with chatgpt to help me understand and I was looking at other tool from other creators and I noticed some ellement that was coming frequently... is my judgment is right?:
- I feel like the structure of the folders is important (the names like Runtime,Editor...)
Do i need to put my script in the package folder... is that important? - There is something called a "Assembly definition"... of what i understand, this is need to be in the same folder of my script and is needed so my script can une other script in the project.
- I showed to chatgpt the fonction you showed me and i think there are still things that are missing because I still get the errors in the console saying that the vrcfury fullcontroller is not found...
Sorry for all the questions, I just started to learn all of that
"Editor" folders are special. Any file in Editor folders is not included in the game. There's other folders with special names, too! https://docs.unity3d.com/Manual/SpecialFolders.html
Also, this might not be relevant for your work on avatars. But Udon Sharp (U#) is a language used in VRChat world projects. The udon sharp compiler ignores any .cs files that are in Editor folders. Which is helpful if your script is C#. Then it won't be mistaken for U# and cause errors.
A package is a group of files (scripts, art assets, anything) with extra info about them. Info like a version and other packages they need. And the Packages folder is where Unity's Package Manager and the VRChat Creator Companion keeps its packages. https://docs.unity3d.com/Manual/Packages.html
Runtime and Editor folders come from these recommendations about how to structure a package. "Runtime" folder isn't special and "is only a convention and doesn’t affect the Asset import pipeline." https://docs.unity3d.com/Manual/cus-layout.html
Sorry this is so much! Also assembly definitions don't have to be in the same folder, it can also be in parent folder as long as it doesn't contain other .asmdef. I just wanted to keep it simple!
This applies to "Editor" folders in the Packages folder too.
So i need to put my script into my own editor folder with a assembly definition? Plus, in this assembly I need to add "com.vrcfury.api" in the reference ? But do i need to mention in my script that I'm using "com.vrcfury.api"?
I also got errors about name spaces
Oh yeah I forgot. You would need using com.vrcfury.api; at the top of the .cs file.
Hmhm
ok I will try again, I might ask for more help later. Thank you so much to take the time to explain it to me
You're welcome! And I can help more if there's trouble
is it possible (via legitimate means) to detect the instance type via Udon?
let's say you have a stage world where the stage controls are locked unless you are on a whitelist.
would it be possible to have the whitelist default to being unlocked for everybody in private instances?
Public instances currently don't have an instance owner. So if you ever detect that someone joins and they're the instance owner then it can't be a public instance.
Im still guessing you wouldn't be able to use this as a clause for creating.......... saucy content for private instances only right?
I wouldn't rely on it.
if(VRC.GroupAPI.groupType==groupType.public) Destroy(floorCollider);
so after a lot of testing... I think I face a wall...I have no clue how to fix that... I get this error in the console: Assets\AddFullController\Editor\AddFullControllerWindow.cs(52,46): error CS1729: 'FuryFullController' does not contain a constructor that takes 1 arguments
I also have that
also I got a error message saying that the FullController was pivate... so I can't use it?
can someone help me understand an error message
If you don't ask the question, no one can help you.
What
remove missing scripts or add the missing packages
whered you get the avatar
what base
nvm i js had to delete them and set avi view
You never answered my question
its one he made like a chibi
If he made it then why was it missing the sdk entirely
idk
FullController is the internal component so you probably can't (or shouldn't) access it. VRCFury might change it in future versions and it would break your tool. So that's why VRCFury made a public api (com.vrcfury.api) for tools to use instead.
using UnityEditor;
using UnityEngine;
using com.vrcfury.api;
namespace OrchidSeal.AddFullController
{
public class SimpleAddFullControllerEditor : EditorWindow
{
public GameObject selectedObject;
[MenuItem("Tools/Add FullController to Selected Object")]
public static void ShowWindow()
{
GetWindow<SimpleAddFullControllerEditor>("Add FullController");
}
private void OnGUI()
{
var formHasError = false;
GUILayout.Space(10);
selectedObject = EditorGUILayout.ObjectField(selectedObject, typeof(GameObject), true) as GameObject;
if (!selectedObject)
{
EditorGUILayout.HelpBox("Please enter an object.", MessageType.Error, true);
formHasError = true;
}
GUILayout.Space(20);
if (GUILayout.Button("Add FullController") && !formHasError)
{
var fullController = FuryComponents.CreateFullController(selectedObject);
// Here you could call these functions.
// fullController.AddController(yourController);
// fullController.AddMenu(yourMenu);
// fullController.AddParams(yourParams);
// Save changes if it's a prefab instance.
if (PrefabUtility.IsPartOfAnyPrefab(selectedObject))
{
PrefabUtility.RecordPrefabInstancePropertyModifications(selectedObject);
}
}
}
}
}
oooh I see! so the main line to add the fullcontroller is var fullController = FuryComponents.CreateFullController(selectedObject);
interesting...
is it possible to change some specific animation transitions conditions on a already made animator controller ? If so, what do I need ?
I was also tying to modify values on vrc parameter driver.... I don't really know what I need to do that 
.
Yeah, there's AssetDatabase to deal with files. And AnimatorController methods to edit the controller.
I think you'd want to copy the already made one with AssetDatabase.CopyAsset. And then load the copy with AssetDatabase.LoadAssetAtPath which gets the AnimatorController. And then you can modify it and save it with AssetDatabase.SaveAssets.
I'm not so sure about how to edit animator controllers. It looks like you might be able to do animatorController.GetBehaviours<VRCAvatarParameterDriver>() to get a list of parameter drivers? https://docs.unity3d.com/ScriptReference/Animations.AnimatorController.GetBehaviours.html
Mmmm... ok let me try that 
you can fake final IK using a couple of contacts to measure distance, 2 aim constraints (one to align the entire limb towards the goal, and another just to align the second part of the limb after the bend), and an animation that bends the base of the limb https://cdn.discordapp.com/attachments/1135296600818847856/1344079832287416350/Unity_Fq5gmlqn3a.mp4?ex=67bf9b63&is=67be49e3&hm=180cda80293d492bd3eae1e58c860bf2a05c6101f9438ca777c173391d13f40a&
the only hard part is getting the animation to align things nicely. it'll be totally different depending on the ratio of lengths between the two limb bones. I went frame by frame to align them and then made a curve that was close enough
I want to use a UI canvas overlayed on the screen but doing so blocks the cursor from clicking anything such as the text box that pops up when in client sim, is there a way I can remove its collider or make it ignore cursor clicks?
Remove vrcuishape and it's collider if it's intended for non interactive displays iirc
Could you help me with something, on the VRCFURY fullcontroller, I m trying to change the menu path but I m having a hard time to find the command I need to call ...
There's a second optional "prefix" parameter for AddMenu.
var fullController = FuryComponents.CreateFullController(pinController);
fullController.AddMenu(menu, prefix);
This is a ripped avatar, as given away by the prefab name. Naughty naughty @cold cloud
@warm root yeah noticed that after lol
Although I have seen that prefab error a few times when the sdk exploded in the past
not necessarly, I've seen the SDK/Third party addons failing and leaving a totally legit avatar with such name
but yea, all the missing scripts and avatar descriptor is sus 
Except this is what they started with, not what they ended up with after a build 😉
wouldnt the prefab be the avatar id
chances are if a friend did send them the files, itd lead to missing guids
which could explain missing scripts
since its not referencing the correct id
had it before importing an asset that used vrcfury, the person who made it had a fucked vrcf install and would lead to missing scripts on the prefab
how do I add VRC Avatar Parameter Drivers ?
I'm trying to modify one and I think chat GPT don't really understand what I want...
its a component you add to an animation state
I know, I meant with a script
VRCAvatarParameterDriver is a StateMachineBehaviour. So chat GPT might know that word.
Anyway, the first step is finding the state you want to add the driver to. That's what FindAnimatorState and FindStateInMachine below are for. And then you can add the driver with state.AddStateMachineBehaviour<VRCAvatarParameterDriver>();.
private static AnimatorState FindStateInMachine(AnimatorStateMachine stateMachine, int stateNameHash)
{
foreach (var state in stateMachine.states)
{
if (state.state.nameHash == stateNameHash) return state.state;
}
// Use recursion to search sub state machines!
foreach (var childStateMachine in stateMachine.stateMachines)
{
var foundState = FindStateInMachine(childStateMachine.stateMachine, stateNameHash);
if (foundState) return foundState;
}
return null;
}
private static AnimatorState FindAnimatorState(AnimatorControllerLayer[] layers, string layerName, string stateName)
{
foreach (var layer in layers)
{
if (layer.name == layerName)
{
return FindStateInMachine(layer.stateMachine, Animator.StringToHash(stateName));
}
}
return null;
}
private void AddAvatarParameterDriver(AnimatorController animatorController)
{
// Find the state we want to add the driver to.
var layerName = "Your Layer";
var stateName = "Your State";
var state = FindAnimatorState(animatorController.layers, layerName, stateName);
if (!state)
{
throw new InvalidOperationException($"Failed to find the state {stateName} in layer {layerName}.");
}
var driver = state.AddStateMachineBehaviour<VRCAvatarParameterDriver>();
// Add parameters
var parameter = new VRC_AvatarParameterDriver.Parameter();
parameter.name = "your_parameter";
parameter.type = VRC_AvatarParameterDriver.ChangeType.Set;
parameter.value = 7;
driver.parameters.Add(parameter);
}
I've heard it's better to use Equals() when comparing strings, but does that go for other object types such as ints, or is it only really a time saver for strings?
I didn't think C# was overly picky about that
Some people are really picky so when you only learn C# from indie devs you accidentally learn crazy shit sometimes xD
haha this is true
This sounds like a Java-ism. Java strings can't be compared with the equality operator, because == is checking for reference equality
public static bool operator == (String a, String b) {
return String.Equals(a, b);
}
operator == winds up just invoking String.Equals
I guess it's technically faster to directly use that?
and then there's languages with == and === 🙂
javascript moment
also, I already solved this problem, but I figure someone else might find it useful
I am working on an editor script for a basic "freeze" system, and it needs to animate a bunch of VRC constraints
I got lazy and just animated VRCConstraintBase instead of the specific constraint type
This works in the editor, but causes a security check fail on upload
The solution was to not do that, and to animate the specific type of constraint I was using
this broke right before it was needed for an event. I'm much more trigger-happy with upload tests now 😅
has anyone made a [SerializeReference] property drawer that's available through the VPM?
there are several I've used before, like https://github.com/vertxxyz/Vertx.SerializeReferenceDropdown and https://openupm.com/packages/com.alexeytaranov.serializereferencedropdown/, but they're not distributed in a way I can easily use
(i pull those two in through OpenUPM)
I want to provide a consistent editor UI and documentation style for all of my packages. However, I'm reluctant to create a "ui package" that all of my other packages depend on.
That could cause two of my packages to become incompatible because one depends on UI 1.x.y and another depends on UI 2.x.y. That feels wrong!
I'm thinking about making a Git repository that contains the UI package -- with .meta files excluded. I'd add this repo to all of my packages as a submodule. This would let each package have its own copy of the UI package.
Any thoughts on that?
one immediate problem there is that this package would include assets that need to reference each other
(UIToolkit documents)
if I include the .meta files, then installing two packages that both have the embedded UI package would cause a GUID conflict
if I don't include the .meta files, I lose the inter-asset references within the UI package
I guess I can just...try to not cause breaking changes?
yeah, I think that's the way to go
if this were strictly code, I could probably get away with embedding a copy in every package
but it also includes other kinds of Unity assets that need to be referenced
i'll just Git Gud
Hey, i was working on a VCC comunity repository to streamline world creation in a small team a bit.
Sadly i cant seam to get my scripts to work.
I keep getting this error
Script 'Packages/com.magictwinsworld.sonarpatreonsign/RuneTime/Scripts/SimpleStringLoader.cs' does not belong to a U# assembly, have you made a U# assembly definition for the assembly the script is a part of?
If i understand it correctly i need to link via the Runetime asmdef the UdonSharp.Runtime, but i have done this and it dosnt change it.
Dose anyone have an idear what this could cause?
Thanks <3
The UdonSharp compiler is attempting to compile your script.
I know very little about this, but i'm pretty sure you can do something to prevent that
"U# assembly definition" has nothing to do with the normal Assembly Definition asset
Does anyone know if there’s a fork or a wrapper for animator as code that makes it like… useable? In its current state it seems like it’s a barebones system that you’re meant to implement yourself. I would love if there was a tool written around it where you write the code and it just generates an animator. No modular avatar or anything, just generates an animator for you based on the code that you write
what are u moving? u can move things with code, transform / rotate /etc
what?
oh, it’s for avatars. Animator as code is generally a thing for avatars, hence the animators
"generate animator based on the code you write" you can tell an animator to do things, with code, if that is what you mean?
you can just already use it to create your own animators, without ModularAvatar
it's already has methods to create animator at specific place or edit existing, adding nodes to it, connecting them, assigning animations, edit their settings and so on
Example Code in guides - https://docs.hai-vr.dev/docs/products/animator-as-code/v1.1-whats-new
it has an [ExecuteInEditMode] which just do an animator-related things in unity editor (without Play Mode, else), just need to add the script he will write to any GameObject
Amplituda says u can dm him and he says, without friend request accept or dm to me, i can't write to anyone
oh wow I never would have expected example code to be in the changelog 😅 Thanks for the link!
I want to be able to use VPM packages from an asset I distribute as a .unitypackage. Is there anything better I can do than instructing the user to manually install the packages through the VCC?
To elaborate: I'm working on an asset I want to sell. It feels a bit silly to publish a paid asset in my public VPM listing.
Obviously, people can share a .unitypackage, but there's at least some intent there, haha
But it looks like avoiding the VPM would make for a worse user experience
I don't think you can (currently) lockdown a VPM repo in a reasonable way, so...
I wouldn't be surprised if VRChat is at least considering, if not outright working on, a way to pass an authentication token to VPM repos, and a library that can be used to verify such
yep
another option would be to have a "stub" package that pulls in the dependencies, but doesn't do anything on its own. But that's also awkward.
and I'd still need to get the user to install the correct version of the package, so that they get correct dependencies
I'll probably just do a separate vpm listing for each package (you get that out of the box with VRChat's package templates)
i just logged onto my webserver to discover the disk is full
lmao
actually, this might not be too bad
i'm going to do a user study on this (i.e. trick one of my friends into being a guinea pig)
- add main vpm listing
- install stub package
- import unitypackage
"stub" is the wrong word
argh I'm bikeshedding this so hard
does anyone have documentation on the text formatting tags that work in radials and tooltips? what language is that?
Html I believe when looking at old go locos
At least I think thats what you call it
It looks like it's just TextMeshPro's rich text tags
It's XML/HTML-like, but it's unique to TextMeshPro
Through some semi-complicated setup, you can technically have a git repository file available that is protected by auth keys, but it requires that all users have a github account and to be added to the permissions for said repo. Which to automate would require a bit of infrastructure (like a bot), yes.
There are a couple private repos I know of that do this. Not very common though.
A lot of Unity store sellers use this method. It's quite painless once you've authed.
But it requires using the in Unity git system specifically.
One minor breakthrough: you can use the Resolver package to install additional VPM dependencies through a script.
So, I could include a bootstrapper that prompts you to install the packages.
I'd use version defines to prevent the main assembly from being compiled if you have the wrong packages installed.
so- AVPro's dont loop anymore even with it on. No matter what I do it just wont loop. Did vrc change something about how they work?
I'm not sure exactly where best to ask this... but I'm currently making a custom script that intends to create components and setups just before runtime using the NDMF system.
Everything works as intended except when I try to create a HeadChop component... the head chop is created properly and appears to be completely normal in the editor, BUT in game it behaves as though the "Scale Factor" is set to the defaul of 1.
When I check a destructively built copy of the avatar, even slightly moving the Scale Factor jumps it to a value of 1. Once I do that and upload, everything works as expected.
There's some kind of disconnect between when I set the value via script versus when it's manually set in the editor. In this case I need to do this via script.
How can I properly set the HeadChop component values?
Here's a snippet of how I'm going about it right now.
headChopComponent.targetBones = new VRCHeadChop.HeadChopBone[2];
VRCHeadChop.HeadChopBone source0 = new VRCHeadChop.HeadChopBone();
source0.transform = headBone.transform;
source0.scaleFactor = 1f;
headChopComponent.targetBones[0] = source0;
VRCHeadChop.HeadChopBone source1 = new VRCHeadChop.HeadChopBone();
source1.transform = headChop.transform;
source1.scaleFactor = 0f;
headChopComponent.targetBones[1] = source1;```
Please ping me with a response so I make sure I see this. Thank you <3
I did more troubleshooting and I believe this is something that needs to be fixed on VRChat's side. I've put in a canny request for this here:
huhh
using vrc's image slideshow prefab, im having issues with it not playing in group instances. It doesn't matter if its a group public they wont slide. If it's any other instance though, it works.
This smells like a mismatch between the C# object and the serialized data. Changing a field on a C# object doesn't make Unity aware that the serialized data (what actually gets stored on disk) needs to be changed.
However, I haven't seen this happen before (including after creating new components via script as part of the avatar build process!)
I haven't specifically used a headchop component this way
Yeah, that's about what I was thinking as well. I don't know any way to update this via script though... (I don't think it's possible?)
I’ll try it out on my end if I remember to tomorrow
There should be a way to force update/mark the component as dirty so it updates. I remember having to do that for something in unity in the past but I'm blanking on how I did it exactly.
This might be because I’m using VRCF, which makes a copy of the entire avatar. I know that it saves me from having to save individual objects in my animator correctly
Anyone knows which asmdef has the definition for ApiUser on the base sdk?
I used the "SetDirty" command just after setting up the component, but it still doesn't prevent the reset to default.
weird, that's def a bug them
(forgor)
Almost finished working on a system that allows other players and you to take off a certain piece of clothing, it have cloth like physics in your hand, and can be put back on. Since this is working I am pretty sure I know how to make a system that allows the transfer of clothing from one avatar to another but it’s gonna be a pain to make
Strip poker boutta get upgraded
Exactly
I plan on making it free or like just a few bucks because that shit took awhile to figure out💀
Out of curiosity where do people sell this stuff? Is it all on booth?
Gumroad, booth, payhip, Shopify, really anywhere
Jynxxy is good too but more of a link to one of the others
this is completed now, you can find it in my bio
Can someone please tell me what the cause for this might be? There's a conversation I'm having about it right now in #world-development , I can use all the help I can get.
I can't tell you whats causing it but I can say that it is the default behavior for you to respawn if you fall out of the world and hit the respawn plane. So these missing parts of the world are likely, well, absent. You're walking into nothing, and immediately falling out, hitting the respawn plane, and getting respawned. That's what it sounds like anyways.
I need help, and I can't seem to find the help I need. I'm having an advanced issue and need someone advanced to explain to me why in my scene/project/world whatever, there's an area that when approached or walked in, I'm being auto respawned or teleported to Default spawn point. Any script I created or trigger zone for said script isn't anywhere near this problematic area. The shader can't be the issue because I have this particular material with this particular shader attached to it assigned to a lot of areas, including this problematic area, however, I don't seem to be having this same issue anywhere else that this material has been assigned to. I've replaced this model where the problematic area is located, with a copy of the same model and reassigned all my materials, and added brand new box colliders, and nothing has changed. When I'm in play mode is different from when I'm on VRC Headset. In play mode on unity, I don't seem to be experiencing these same issues as I am in the headset. The area that's causing the problem is also visible in play mode on unity, but appears to be invisible or gone all together in VRC on the headset. I don't know what's going on, culling isn't the issue for that either. Can someone please help me, I've been trying to figure this out and ask around for at least a day so far. I want to fix this and have a working VRC world. I'm already irritated, this is the second time I've had to rebuild my world, because something terrible happened the first time and I ended up losing the files on my computer somehow and I had to reupload everything, like models and assets, and reassign materials and this that and the other. And I don't want to go through all that again over something that could be a potential easy fix, and I'm just unaware of it.
Some video of this behavior would help, it's not super clear by your description
I'll have to wait till tomorrow morning when I get back home. Probably between 5:30 and 10 am
I'm trying to modify a VRCParentConstraint during avatar preprocessing. It works fine in the editor, but in-game, the offsets are wrong.
Here's what I'm doing:
foreach (var constraint in setup.constraints)
{
constraint.Sources = new();
constraint.Sources.Add(new VRCConstraintSource()
{
SourceTransform = setup.referenceTransform,
Weight = 1f
});
constraint.ZeroConstraint();
}
The constraint doesn't get zeroed. Its object winds up with offsets that keep it in its original position
In the editor, it correctly winds up with no offset
I'll probably just set up the constraint destructively for now, but this is a bit mysterious!
The script also modifies the collision tags for contact senders and receivers, and...hang on, did that work either
okay, yes, that worked
Please feel free to open a Canny for this to be looked into further if you think you've found an oversight, in particular including info about how this block of code is being run.
anyone here know how something like ovr toolkit was made? like, how youd make an application thats wrist-locked and overlayed over all steamvr games?
It involves plugging into the steamVR APIs for drawing overlays. There are some projects which show examples of that like this: https://github.com/SDraw/openvr_widgets
but either way, it's going to be a lot of custom work to fit your specific idea
interesting, thank you!
Has anyone done frame analysis on vrchat before? Since you can't profile when in game I was thinking about using the intel frame analyzer to get a closer look. My only worry is that when grabbing a frame for analysis it also grabs the meshes which I feel could possibly trigger some sort of anti-ripping ban trigger. I'm not too sure what VRChat has in terms of that
I have a question about the world SDK. I have an editor script that OnBuildRequested creates a new scene and merges all of the existing ones into that one scene. And then disables all the source scenes. It can build the world and creates the bundles and stuff. But when it comes to upload it just says that the upload was cancelled. I don't really do anything that would return that what I do would fail or something either since it should be before the build anyway. And I removed everything that would trigger post build.
If I'm using an older SDK I can upload last build just fine. If I do a build and test it works just fine.
So, is there something implemented to prevent people from doing funky things, or is just my code bad?
Local build sessions don't use EAC, so it would be fine there.
vrchat dose have in the tnc somewhere you arent aloud to peek at any code or reverse engineer stuff if i remeber right
One problem is, as far as I'm aware, I have to launch the .exe from the analysis tool in order for it to hook correctly which I can't figure out how to for local testing. And as elff said it's looking like it may still be against tos and could get me banned if detected so I might stay away from it for now
Although it does technically class as ripping, there's definitely a distinction to be made between legitimate inspection of resource usage vs being a script kiddy wanting to redistribute someone's paid avi for free
Using VRChat.exe does skip EAC, but that is completely allowed in local tests and that's what both the SDK and quick launcher do
Oh I see, would it be safe to say that if I were to launch VRChat using a frame analysis tool (in my case Intel Graphics Frame Analyzer) in offline test mode it shouldn't cause anything to get flagged?
Correct
Although I trust you I am still a bit nervous for what I'm about to try xd
I can't vouch for whether or not anything will work, but at the very least, local test instances don't expect or require EAC to be running so there is nothing to catch
Cool
that said, if you use launch.exe it will still start up EAC and stop you, even if the server doesn't care
What do you mean by the instance is temporary? What exactly is the difference between desktop and VR?
vrchat/steamvr only support a single VR client running at once per computer. The second interrupts and closes the first
do you want a vr client and desktop client?
or are you trying to have two simultaneous VR clients?
I'm not quite following what it is that you're trying to do
if you only want one client then... you only need to launch one client?
is it launching multiple when you don't want it to?
oh yeah, that's just not what the URIs do
you should use invite me instead
that's the only option I'm aware of, sorry 
URIs always launch a new client, they do not hook into existing clients
I suppose if the automation is more important than the time it takes to switch, I'd close whatever running clients first and then launch the new one
Hell yeah, managed to get it to work
Realised I should add a couple arguments after the .exe path instead of in the environment variables field (I've no clue what I'm doing)
What a shocker, my massive bundle of leaves was the massive spike lol
Damn this is so useful, like I can see that audiolink uses 13 draw calls but takes about the same time as one draw call further on. Goes to show that relying on drawcalls as a performance indicator is still fairly vague
yeah in the case of clever world building, it's less a big deal. on some avatars though.....
i'm gonna have to try this out
Hey hey, a long time ago i saw in action menu you can hide some characters(codes) which resize the action menu's texts and picture, can someone help me with it?
Pretty sure its just html
Work has begun on a universal better expressions menu!
The what
lol, I’m working on a better expressions menu, just a few features will include 3d representation of toggle that’s about to be put on, saveable presets, easier navigation and it’s 3d so stick drift won’t be an issue

I’m also making a auto setup script with it so all you will have to do is put it on your avatar
I'm occasionally seeing a stack-trace, but the trace doesn't actually seem to mention anything from my own code, only SDK code. Could anyone elaborate on what's actually going wrong here? The odd part is that the image download does succeed.
2025.04.28 14:45:43 Debug - [Image Download] Attempting to load image from URL '[redacted]'
2025.04.28 14:45:44 Error - Object reference not set to an instance of an object.
System.NullReferenceException: Object reference not set to an instance of an object.
at VRC.SDK3.Image.VRCImageDownloader+ImageDownloader.RunUdonEventOnMainThreadAndRemoveFromQueue (System.String eventName, System.ValueTuple`2[T1,T2] argument) [0x00000] in <00000000000000000000000000000000>:0
at VRC.SDK3.Image.VRCImageDownloader+ImageDownloader.RunUdonEventOnMainThreadAndRemoveFromQueue (System.String eventName, System.ValueTuple`2[T1,T2] argument) [0x00000] in <00000000000000000000000000000000>:0
at VRC.SDK3.Image.VRCImageDownloader+ImageDownloader.DownloadImage (System.Uri uri, System.Threading.CancellationToken cancellationToken) [0x00000] in <00000000000000000000000000000000>:0
at VRC.SDK3.Image.VRCImageDownloader+ImageDownloader.<DownloadImage>g__SlicedTextureUpload|52_0 (System.Int32 width, System.Int32 height, System.Int32 bytesPerPixel, UnityEngine.TextureFormat format, System.Int32 mipLevel, Unity.Collections.NativeSlice`1[T] outputBuffer, UnityEngine.Texture2D outputTexture) [0x00000] in <00000000000000000000000000000000>:0
at Cysharp.Threading.Tasks.Internal.ContinuationQueue.RunCore () [0x00000] in <00000000000000000000000000000000>:0
--- End of stack trace from previous location where exception was thrown ---
at Cysharp.Threading.Tasks.UniTask+ExceptionResultSource.GetResult (System.Int16 token) [0x00000] in <00000000000000000000000000000000>:0
at VRC.SDK3.Image.VRCImageDownloader+ImageDownloader.DownloadImage (System.Uri uri, System.Threading.CancellationToken cancellationToken) [0x00000] in <00000000000000000000000000000000>:0
at VRC.SDK3.Image.VRCImageDownloader+ImageDownloader.<DownloadImage>g__SlicedTextureUpload|52_0 (System.Int32 width, System.Int32 height, System.Int32 bytesPerPixel, UnityEngine.TextureFormat format, System.Int32 mipLevel, Unity.Collections.NativeSlice`1[T] outputBuffer, UnityEngine.Texture2D outputTexture) [0x00000] in <00000000000000000000000000000000>:0
at Cysharp.Threading.Tasks.Internal.ContinuationQueue.RunCore () [0x00000] in <00000000000000000000000000000000>:0
--- End of stack trace from previous location where exception was thrown ---
at Cysharp.Threading.Tasks.UniTaskCompletionSourceCore`1[TResult].GetResult (System.Int16 token) [0x00000] in <00000000000000000000000000000000>:0
at Cysharp.Threading.Tasks.CompilerServices.AsyncUniTask`1[TStateMachine].GetResult (System.Int16 token) [0x00000] in <00000000000000000000000000000000>:0
at Cysharp.Threading.Tasks.UniTaskExtensions+<>c.<Forget>b__16_0 (System.Object state) [0x00000] in <00000000000000000000000000000000>:0
at Cysharp.Threading.Tasks.UniTaskCompletionSourceCore`1[TResult].TrySetException (System.Exception error) [0x00000] in <00000000000000000000000000000000>:0
at VRC.SDK3.Image.VRCImageDownloader+ImageDownloader.DownloadImage (System.Uri uri, System.Threading.CancellationToken cancellationToken) [0x00000] in <00000000000000000000000000000000>:0
at VRC.SDK3.Image.VRCImageDownloader+ImageDownloader.<DownloadImage>g__SlicedTextureUpload|52_0 (System.Int32 width, System.Int32 height, System.Int32 bytesPerPixel, UnityEngine.TextureFormat format, System.Int32 mipLevel, Unity.Collections.NativeSlice`1[T] outputBuffer, UnityEngine.Texture2D outputTexture) [0x00000] in <00000000000000000000000000000000>:0
at Cysharp.Threading.Tasks.Internal.ContinuationQueue.RunCore () [0x00000] in <00000000000000000000000000000000>:0
The code that I suspect triggers the problem is just...
pictureDownload = new VRCImageDownloader();
pictureDownload.DownloadImage(thumbIds[videoId], imageMaterial, null, textureInfo);
localThumb = true;
}```
The error “NullReferenceException” means the code you are trying to access is null aka it is likely that VRCImageDownloader() is returning null and it’s trying to set the picture download to nothing
What you want to look for in your error message will be the line number of which your error is occurring, find these and it can be easy to figure out
If that were the case, the image download wouldn't have succeeded. It does though.
There is no line number, that's the whole reason I posted this.
None of the functions listed are my functions either.
(what I posted is the whole error / stack trace)
possibly the null you're setting there? that needs to be the UdonBehaviour that will receive the image events
it's optional in graph, but is required in UdonSharp
Note that UdonSharp will not receive any events unless udonBehavior is specified.
the function might be getting confused when you set it to null
just tested and I've replicated your results. You need to supply a valid UdonBehaviour to the function. giving it null causes the error you're receiving
Ugh, that's very annoying. Thanks Lego. I suspected that may be the case depite how it doesn't look like it should need it.
This is indeed from an oversight caused by the third parameter to DownloadImage() being null, since while UdonGraph auto-assigns the current Udon behavior in this case, UdonSharp doesn't. This will now be corrected in a future release (as in don't throw an exception, the difference between UdonGraph and UdonSharp is intended).
<@&397642795457970181>
Thanks
np
A little update on my progress. Im successfully able to get all toggles off of any animator in the avatardesc even the vrc fury ones and toggle them on and off with the press of a button. I also set the image of the button to the image of the toggle. The animator, layers, states, animations, behaviors, and transitions are all made through script too. The menu ATM can be put on any avatar that has 0 sub menus and will toggle on and off the toggles.
Script length is 381 line so far
I've made a simple unity plugin for adding toggles/animations to a blend tree. The primary goal with this is to eventually to make smoothing a lot easier to add to blend trees.
I would also like to eventually add some qol stuff too like a tool the add parameters from the expression menu to the animation controller.
pro tip: shrink your window down so things aren't teeny tiny with a ton of wasted space. It's hard to see what is going on here.
this is pretty cool ^^ though I will mention that there are already tools that do this sort of thing. someone in the VRLabs discord made their own, and MACS can generate AAP animations and AAP smoothing
Am I misunderstanding how the Copy Avatar Parameter Driver behaviour works? I'm trying to make R float follow the R_Driver float but it just won't change, is there something obvious I'm just missing?
behaviors only run once, when the state is entered
to make it continuously run, you can use a self-transition
though, what exactly are you trying to do here? what is the purpose of the "R" parameter?
Changing RBG color values on an avatar
Trying to make different "save states" you can switch between and set different color presets yourself between them
I see
I was going to suggest just plugging the 3 floats (R, G, B) into a Direct blendtree, with 3 animations, each one controlling the value of one color channel
that would be the most efficient way of controlling color
I suppose that still applies, but you'd be using the parameters copied from the presets
If I get my proof of concept working I might optimize it later on
what you could do is use an extra unsynced bool in the menu as the "Parameter" option, so that it returns true when the menu is open. then you can use that to make your self-transition run
so that it only spams the parameter driver when the menu is open
That's a good idea!
Thanks a lot, I'll try this out after dinner!
I did a quick test anyways and this seems to work perfectly fine now
The self-transition did the trick
In case anyone is interested in seeing the results, did a video.
https://bsky.app/profile/zarniwoop.se/post/3loyrwyzces2i
I managed to figure out how to save and load custom color presets you can set yourself for a #VRChat avatar I'm making!
Normally I wouldn't make something like this for my own personal avatars, but making things for public use lets me do some more varied stuff. Was very satisfying figuring this out!
nice ^^
did you sync each parameter separately or did you sync with dedicated parameters for that purpose?
i'm assuming the drive parameters are synced and the rest are local
but if you wanted to push it you could also sync only one parameter at a time and base which one is currently synced on a bool
reduces the synced bits from 24 (3x 8-bit floats) to 11 (1x 8-bit float 3x 1-bit bool)
that's probably the most you could reduce and still be lossless, but if you're ever really cramming for space you can do a lossy conversion to binary and interpolate with float smoothing
this is how facetracking is usually synced
I ended up with 3 synced floats (R G B) and bunch of unsynced ones to store values. There's plenty of room to optimize but I got plenty of budget and optimizing wouldn't give me any huge benefits in this case
yeah i just was curious, i like trying to push these things
you could actually get away with 10 bits now that i think about it, since you could convert two bools into a 2-bit int instead of 2 separate bools which gives you 4 values for which color to sync, which would allow you to sync another float as well, maybe for alpha lol
I'm not too happy with ending up with 6 layers (3 with motion time for RGB floats, 3 logic layers) but eh, it works
oh you shouldn't need that many layers, did you set it up with dbts?
I'd probably use two layers tbh, one for the colors and one for the save state logic
Dbts?
direct blend tree
Oh, no, I could've done that
you can use a DBT for the colors to reduce those to one layer, and you'd probably just need one logic layer since you only have one button pressed at a time
and in the case someone wants to mess around and use both menus at the same time you can just have certain buttons take priority (or just whichever was pressed most recently)
True, thanks for the insight!
@autumn hatch here is how i would reduce the layers to 2
in this example i used 3 save slots because i didn't feel like making more lol, but you can add up to 256 slots this way
what the logic layer does is on the remote side just don't do anything, then all the logic is handled on the local side. Then on the local side it will save your current settings to the last save slot used, then it sets the "last save slot" parameter to the current parameter and loads the current save slot. Then it waits for the parameter to change, which starts over this process, which means the save is updated for each slot only after the next one is loaded since the most recently used slot is stored locally.
and from any of these states if the randomize button is pressed it will randomize the values, wait for the button to not be pressed, and then immediately save the new value and load the correct slot
just make sure the random parameter driver is set to "local only" since it uses the anystate which means it will transition for remote users as well
or actually you could just add the IsLocal parameter to that condition lol
I would also like to mention that the blendtree logic could be simplified further, by doing what I said here ^
you could get it down to one blendtree and 3 animations
and as an extra optimization, if the layer that does the logic doesn't actually have any animations in it (which it shouldn't have anyways), you can set the layer weight to 0 to make it perform better
state behaviors still run even if the weight is 0
VRCFury will actually notice this and do the optimization automatically nowadays
but it doesn't hurt to also do yourself
Hi, I was thinking about writing a tool to copy over saved avatar parameters from one avatar to another when you have multiple version of the same avatar.
I checked the docs and saw the LocalAvatarData\ folder which is technically what i want but when i go and change one value and load the avatar the file is being overwritten to its original state.
do you know why that happens ? Is there another location that i could go modify to do that ?
Uploading 6 different version of the same avatar and redoing the toggles for each ones is a pain
the reason why I was thinking about it is because of the new avatar marketplace thing. creators are allowed to have variants of an avatar, so I was thinking it'd make sense to have toggles sync between them. it would also be useful if you have your avatar modularized into a base + accessories/clothing, that way you can do separate uploads for different outfits, and have base toggles sync
I was just thinking of a way to one time sync all common parameters
on selected avatars
is that not a thing in Pumkin's tools?
they mean in game
change a toggle on one avatar and it changes it on another
oh I see
Well more like, you get a new avatar, you spend 10-30 minutes changing all the toggles and hue shift how you want it
then you have like 5 other different version of the avatar that you also need to change all your toggles and hue shift the same way so would be nice to have a tool when you say " take all the toggles i made from this avatar and do the same to those other 5" then you switch into another version of the avatar and all the toggles and hue shift are the same as the one you spent time doing earlier
with no actual standards for parameters, I'm not sure how this could possibly work
well there is the folder LocalAvatarData\ saved on your pc where its your user ID as a folder and inside a bunch of text file with avatar ids as name
and when you open it, it has all your saved toggles parameters state
but when i tried to manually modify one and switched into said avatar, the file got overwritten to its previous state
Yes but this would only work if multiple avatars have exactly the same parameters
yeah but you can just write a tool to copy over only the parameters that have the same name or something
like if both avatar have a Hue_Shirt then just copy over that saved parameter
and ignore all the ones different
VRCFury may complicate this a bit, since all parameters added by fury toggles or Full Controllers (that are not defined as global params) get VF##_ appended to them
and it may be different per avatar
assuming it does exactly the same thing - what if it's named the same but does something different?
doesnt they still have the original name in that naming shceme ?
no, they get uploaded with the VF stuff
well thats on you
too bad i guess
yes but they still have the original name somewhere in the string no ?
right - I mean this doesn't seem like something of much use if it's for such an extremely narrow use-case
if it was part of a full controller, the original param name is prefixed, but if it's a fury toggle, it might be different, I forget
you could do some fuzzy matching and find a match, but if you have multiple instances of one prefab, you would end up with two identical param names
i mean im sure theres a lot of people having 6 different upload of the same avatar because one is a full version, one is a "lite" version , one is optimized but they all share common parameters
etc etc
if you're uploading them though why not just set those defaults before uploading?
or you mean you want them to also be synced I guess
cuz i prefer doing it in vr
unity doesnt always gives the best visual result compared to ingame
and im not gonna "note" what i do to "hard do it" in the parameter file each time for every avatar :c
I mean, that's why you make stuff modular, no?
you have one "common" base avatar, you make it a prefab, and you use it to build different versions of the avatar, each with different stuff added to them
so that if you change something on the base, they are all going to have that change
I mostly use variants (outfits primarily) of the same avatar and I've never felt I needed this. I suppose it's an interesting idea but it'd need a bunch of work to do right
you can combine that with that one tool to bulk-upload multiple avatars if you want
i mean sure but thats what i want to use on commercial avatars, not one that is your "OC" per say
when i buy an avi i upload it and just get ingame
theres a tool to bulk upload ?
https://github.com/I5UCC/VRCMultiUploader this one seems to be the most up to date
i mean from what i see wouldnt be too hard, i just dont know why said file doesnt keep the changes i make to it
https://github.com/imagitama/vrc-bulk-upload but there's also this one
thats why i asked here
its as if vrchat knows the state of that file before i modify it when its supposed to read from it and write upon changes ingame
idk why it would write when i just switch into the avatar
thank youu
So i got this avatar with this ID, if i go to the LocalAvatarData folder i can see the avtr_472f5ac0-b041-4f5c-87c4-3ed2212bb2c5 File that contains the saved toggles state of my avatar.
I switch out of this avatar, open the file and changed the toggle for the tail from 1 to 0 ( which will turn it on )
I saved the file and then switch back into the avatar. But then the file get overwritten back to 1
i also notice the file gets written as well when changing out of the avatar
so both in and out overwrites
i dont see why/how it would overwrite when loading into the avatar when its just supposed to read from that file
oh I think I encountered a similar issue
your avatar parameters that you had last selected, I think are kinda stored persistently? Even if you update that avatar
it sees you had X parameter saved, the new avatar file still has X parameter, and loads it
Ye make sense but i'm modifying the file that has the toggle saved
i'm not touching anything in Unity
i'm touching this
this is the file the game is supposed to read the saved states from
but cant figure out why it gets overwritten by the game when its just supposed to read from it
so it doesnt acknowledge any changes made to it
I guess it's an unexpected way to change the value, so its behavior is undefined
to be clear, i dont want to change the state Live
i just want to copy paste the parameters from one avatar to another/multiple ( if they have common parameters name )
so i dont have to redo the hue shift on every of them
Ok
I tested doing the same thing but closing my game each times
and it works
looks like all those files in LocalAvatarData are loading in RAM when vrchat is running and the game overwrites the files when changing in and out avatars
but if modifications are made while the game is not running then it will work
small osc tool is prob the easier way here
the language i'll use for this is not very OSC friendly
its a very niche thing, i don't really know too much about anything else than that one
also if i were to make it with OSC i'll only be able to apply all the changes to the avatar i'm currently in, meaning id have to switch in X avatars that i want to paste my settings to but if i use the files i can just do it all at once ( if file already exists )
so im coming across a rather bizarre issue and wondered if anyone had or has the same problem? when sending the osc parameter /avatar/change "avtr_{id}" the game registers it but never actually issues the command to change the avatar
is that function actually broken in vrchat?
or did the function change and the documentation was never updated
because my osc listener prints it as this
[OSC] msg → {"addr": "/avatar/change", "args": ["avtr_{id}"]}
I think the docs haven't been updated, but I did manage to find this
https://docs.vrchat.com/docs/vrchat-202512#changes--fixes
You can now use OSC to change avatars! To do so, send a message to the /avatar/change address with an avatar ID as the argument. avtr_26187637-0c30-4a09-86e1-bc928c07309e, for example. It should look like that. You can only change to avatars in your favorites, your recents, or that you've uploaded yourself.
your issue might possibly relate to that last point
hmmm
am gonna write a test script since i am using an extremely custom flavor of osc query in python
it might not be supported over the osc query interface
for reference, python does not have a package or contain any valid documentation for OSC Query to do so
i had to probe with zeroconf and mDNS and write a custom http json response / reader
will let you know what i find
python doesn't have an OSC package?
not for Query
unlike C# and other langauges
you have to use Python OSC
which is problematic to say the least
because certain apps like VRCFacetracking
will fight for control since its running as administrator
huh I'm... kind of seeing the same thing, not sure what's going on
I wanted to test to see if that avatar changing thing was working, but first I wanted to test if, in general, OSC was working alright by just jumping. The big red button is from VRChat's demo project in the docs, and the second button is one I created, which as far as I can tell is identical to the first button
both successfully send the signal, but only the demo button actually works?
ah nvm. figured it out. Man TouchOSC is not super clear
What was the fix?
I was sending the argument as a float, instead of an integer as it expected. This for some reason appears identical in the debug
I'm sorry I have to come onto here and be a bother, but I'm at my wits end. I have a slide model that I'm trying my darnest to make slippery and act as a slide for VRChat, but for the life of me I can't get it to be slippery. Where might I go to ask for assistance with my issue?
I'm trying the /avatar/change now and it indeed seems to not be working
ahhhh seems im correct in the avatar change feature being broken then
I found a canny on it just now, and people are saying it only works with favorited avatars (I'm currently testing it with an avatar I have uploaded, but not favorited)
aaaand.... it worked!
so the original article seems inaccurate. They must be favorited for it to work
which I think would be a bug, in my opinion
I think zSkull posted a slippery script earlier (god is there like... a better way I can describe that..?)
lemme see if I can find it
Do you think the surface has to be flat or might it work on something curved?
not sure, I did not try the script myself
Well I'm about to
The answer is.... I'm not sure. I attached the custom physmat, but scripts aren't doing....
Okay the full answer is no it does not work. Thank you though for the attempted assist.
YUR so like since vrc hates us and dont let us use VFX graph. HOW TF DO I DO DECALS .........


