So cool!! Is the full script (without personal identifying information) something youād be amenable to sharing in our Show & Tell section, or allowing us to include in this repo?
If youāre open to inclusion in the repo, submit a PR, and Iāll take a look and get it approved after testing.
You can call the file something like UploadLocalBySplit.js
Yeah no problem at all, Iāll have a look at a PR tomorrow 
I have some other stuff in this repo that could be useful JS snippets;
generateVersion
createProject
uploadWithAnnotation (for a directory of images and annotations)
getTrainingStatus
This is how the train/test split turned out, so that wasnāt the cause:
As you suggested, Iāll make another project and try this again. A shame to waste the credits
Trying it with this new project:
@Mohamed still nothing after using a name without so many numbers like you suggested:

Hereās something I just noticed. If I get some info about a project Iāve made using the Roboflow site:
We can see that project.classes lists the number of ālolaā instances:
But if I do that again for a project Iāve created using the API
(https://api.roboflow.com/iadt/lola/4?api_key=****nocache=true)
The classes are empty, despite having added 12 annotated images with the class name ālolaā to this one too:
Could this be the reason for the random coin-related class names?
For context, hereās how Iām creating projects:
const createProject = async (name, annotation) => {
return new Promise(async (resolve, reject) => {
// annotation, what are you annotating, e.g. 'fido', 'dog', 'cat', whatever the user wants
await axios
.post(
`https://api.roboflow.com/iadt/projects/?api_key=${process.env.ROBOFLOW_API_KEY}`,
{
name: name,
type: "object-detection",
license: "CC BY 4.0",
annotation: annotation,
}
)
.then((res) => {
resolve(`Created new project: ${res.data.id}`);
})
.catch((e) => {
reject(`Error creating project: ${e}`);
});
});
};
Which I just copied over from the Python version. That looks like this:
def create_project(self, project_name, project_type, project_license, annotation):
data = {
"name": project_name,
"type": project_type,
"license": project_license,
"annotation": annotation,
}
r = requests.post(
API_URL + "/" + self.url + "/projects?api_key=" + self.__api_key, json=data
)
r.raise_for_status()
if "error" in r.json().keys():
raise RuntimeError(r.json()["error"])
return self.project(r.json()["id"].split("/")[-1])
Never mind. I ran that https://api.roboflow.com/iadt/test_training_via_api/1?api_key=****&nocache=true request again, and now it says classes: {lola: 12} as expected 
No idea whatās going wrong here
These tests youāve ran are extremely helpful!!
Iāve added these details to the report. One final ask for the report - the images that just gave you the weird result (worked once, didnāt work the other time):
Can you send them to help@roboflow.com?
This way we have the exact examples for testing, reproduction of the issue, and testing after the fix to ensure everything is in order.
Hi Mohamed,
Iāve just sent an email with all the images and annotations Iāve been using, as well as two gists which contain the utilities I use to interact with the Roboflow API, and the wrappers I use for my React client to interact with those functions. Let me know if I can do anything else to help solve this
Thank you! Weāve isolated the issue, and have a fix ready for it. It should be pushed live soon. Iāll alert you when its available.
@jakewarrenblack the fix is live!! Thank you again for your help, and patience.
I saw your PR too in GitHub - roboflow/roboflow-api-snippets: repo for versioning snippets that show how to use Roboflow APIs
Iāll get it reviewed later today and merged in.