The SDK has a big problem with error logging. When uploading, if it encounters an error that it recognizes, it will correctly tell you what is wrong. But if it encounters an error that it doesn’t recognize, instead of saying “unknown error” or something similar, it will instead tell you that one of its known errors is what’s going on. For example: I (and a few weeks later my friend has this problem too) was uploading my avatar for windows build target. And I got an error telling me that my avatar failed to upload to android build target. After an hour or banging my head against my keyboard, I figured out that my avatar wasn’t trying to get pushed to android build target or anything. It was actually just some missing components that the SDK was having a seizure about. After I fixed these I could upload my avatar.
Fast forward to now. I get an error when trying to upload: “Avatar validation failed” The logs stated “Attempted to load the data for an avatar we do not own”. Essentially telling me that my blueprint ID was of an avatar that someone else owns. Funny thing is tho, this was a new avatar I was trying to upload, the blueprint ID was empty. After another headbanging session featuring my keyboard I found the problem. It was nothing related to an incorrect or lacking blueprint ID. It was a modular avatar component that was giving a parameter an unusable parameter type (e.g: it wasn’t using bool, float, or int). When I fixed this, suddenly the blueprint ID problem went away.
Long story short, if the SDK detects an error, it will always pretend it knows what the error is, even if it doesn’t. There is no “unknown error” (At least not one that i’ve seen anyways), it will always say SOMETHING, even if it’s completely wrong.
Have any other creators noticed this? I’ve seen other people posting about both of the two examples that I gave here, so I doubt i’m the only one.
Also, I have looked into the SDK code a bit, and pretty much confirmed my suspicions. But I am not an expert with the underlying code. So anyone who knows the code a bit better than me, do you have any comments about this?
Just to quickly clarify. SDK logs this particular thing every time it fails to upload a new avatar due to how the check is currently done.
Basically it goes like this:
- a new ID is assigned when you try to build and upload a new avatar
- “Avatar validation failed” (the actual error, as the avatar validation probably crashed somewhere deep in the internals on an unusable parameter type)
- The upload is aborted
- The avatar still has the ID it assigned earlier
- As that ID doesnt exist - the SDK encounters a failure when it tries to load information for that ID
- SDK logs the “Attempted to load the data for an avatar we do not own”
- SDK clears the ID so you can try uploading a new avatar again
Hope that at least gives some context. Generally speaking “Attempted to load the data for an avatar we do not own” is never a cause of any actual blocking errors, and will probably be reduced to a warning/information log in the future to avoid acting as a red herring.
Usually when the “Avatar Validation Failed” error shows up - the reason for it is logged somewhere earlier by the SDK internals. As it can’t be nicely packaged in an error shown to the user in the SDK panel itself at this time. So it essentially reports that “an error happened during the avatar validation process”, which is what runs after MA/VRCFury/d4rk optimizer and all the other avatar related tools have done their job.
But if there were no other errors and you have particular reproduction steps for the modular avatar creating bogus parameter types we could use to try it out and add better error handling for those cases - please make a canny report!
Main thing is that if there is an info message about the asset bundle not being built, don’t bother reading the errors after that