# 3D Gaussian splat .ply not uploading

**URL:** <https://community.cesium.com/t/3d-gaussian-splat-ply-not-uploading/45321>\
**Category:** Cesium ion\
**Created:** [February 26, 2026, 12:51am UTC](https://community.cesium.com/t/3d-gaussian-splat-ply-not-uploading/45321 "2026-02-26T00:51:15Z")\
**Posts on this page:** 13\
**Page:** 1

<div class="post-metadata">

**Author:** ![islit](https://sea2.discourse-cdn.com/cesium/user_avatar/community.cesium.com/islit/32/28173_2.png) [@islit](https://community.cesium.com/u/islit)\
**Post date:** [February 26, 2026, 12:51am UTC](https://community.cesium.com/t/3d-gaussian-splat-ply-not-uploading/45321/1 "2026-02-26T00:51:16Z")

</div>

Getting this error message when trying to upload a .ply 3DGS dataset to Cesium Ion?

point\_cloud.ply

POST with passive cookie authorization must include a valid x-cesium-csrf header.

suggestions?

Thanks!

---

<div class="post-metadata">

**Author:** ![Ankit\_Trehan](https://sea2.discourse-cdn.com/cesium/user_avatar/community.cesium.com/ankit_trehan/32/14038_2.png) [@Ankit\_Trehan](https://community.cesium.com/u/Ankit_Trehan)\
**Post date:** [February 26, 2026, 2:24pm UTC](https://community.cesium.com/t/3d-gaussian-splat-ply-not-uploading/45321/2 "2026-02-26T14:24:13Z")

</div>

Hi,

This error could be caused by the application being stuck in a bad state. I would suggest trying incognito mode and see if the upload succeeds. Also a hard refresh for the application might help in this case too.

Please try the two and let us know if you are still having any issues.

Thanks,  
Ankit

---

<div class="post-metadata">

**Author:** ![islit](https://sea2.discourse-cdn.com/cesium/user_avatar/community.cesium.com/islit/32/28173_2.png) [@islit](https://community.cesium.com/u/islit)\
**Post date:** [February 27, 2026, 8:02pm UTC](https://community.cesium.com/t/3d-gaussian-splat-ply-not-uploading/45321/3 "2026-02-27T20:02:05Z")

</div>

thank you, I tried in incognito mode and uploading the .ply worked, however, under my assets is shows up with another error for asset id: 4489108

---

<div class="post-metadata">

**Author:** ![mdc9001](https://sea2.discourse-cdn.com/cesium/user_avatar/community.cesium.com/mdc9001/32/15919_2.png) [@mdc9001](https://community.cesium.com/u/mdc9001)\
**Post date:** [March 2, 2026, 2:43pm UTC](https://community.cesium.com/t/3d-gaussian-splat-ply-not-uploading/45321/5 "2026-03-02T14:43:01Z")

</div>

Glad you were able to get it uploaded.

I see that asset 489108 has failed. I have reached out to our team to get more details about what could have caused this and have them investigate further.

---

<div class="post-metadata">

**Author:** ![islit](https://sea2.discourse-cdn.com/cesium/user_avatar/community.cesium.com/islit/32/28173_2.png) [@islit](https://community.cesium.com/u/islit)\
**Post date:** [March 2, 2026, 11:51pm UTC](https://community.cesium.com/t/3d-gaussian-splat-ply-not-uploading/45321/6 "2026-03-02T23:51:52Z")

</div>

thank you, the .ply I uploaded was just something captured using an xgrids scanner, then uploaded to supersplat and cropped, and then resaved again as a .ply

---

<div class="post-metadata">

**Author:** ![islit](https://sea2.discourse-cdn.com/cesium/user_avatar/community.cesium.com/islit/32/28173_2.png) [@islit](https://community.cesium.com/u/islit)\
**Post date:** [March 9, 2026, 6:32pm UTC](https://community.cesium.com/t/3d-gaussian-splat-ply-not-uploading/45321/7 "2026-03-09T18:32:24Z")

</div>

has there been any solution found for why the ply files are not working? The method I described above was just what I used for uploading, but the data didn’t work and returned that asset id error

---

<div class="post-metadata">

**Author:** ![mdc9001](https://sea2.discourse-cdn.com/cesium/user_avatar/community.cesium.com/mdc9001/32/15919_2.png) [@mdc9001](https://community.cesium.com/u/mdc9001)\
**Post date:** [March 10, 2026, 12:56pm UTC](https://community.cesium.com/t/3d-gaussian-splat-ply-not-uploading/45321/9 "2026-03-10T12:56:05Z")

</div>

Thanks for your patience. Our team is still investigating this issue at this time. We hope to have some additional information soon.

---

<div class="post-metadata">

**Author:** ![mdc9001](https://sea2.discourse-cdn.com/cesium/user_avatar/community.cesium.com/mdc9001/32/15919_2.png) [@mdc9001](https://community.cesium.com/u/mdc9001)\
**Post date:** [March 10, 2026, 1:41pm UTC](https://community.cesium.com/t/3d-gaussian-splat-ply-not-uploading/45321/10 "2026-03-10T13:41:48Z")

</div>

Our team has determined that this was caused by an invalid point that was set to all `NaN` values in the file. We are looking at updating our tiler to ignore these points. In the mean time the work around would be to edit the file to filter out any `NaN` points before uploading to Cesium ion. Please let us know if that helps you or if you have other issues.

---

<div class="post-metadata">

**Author:** ![islit](https://sea2.discourse-cdn.com/cesium/user_avatar/community.cesium.com/islit/32/28173_2.png) [@islit](https://community.cesium.com/u/islit)\
**Post date:** [March 10, 2026, 2:49pm UTC](https://community.cesium.com/t/3d-gaussian-splat-ply-not-uploading/45321/11 "2026-03-10T14:49:26Z")

</div>

thank you for your help! I’m not sure how to edit the file to remove any NaN points? Are these considered points that are on the outskirts of the main gaussian splat cluster?

---

<div class="post-metadata">

**Author:** ![mdc9001](https://sea2.discourse-cdn.com/cesium/user_avatar/community.cesium.com/mdc9001/32/15919_2.png) [@mdc9001](https://community.cesium.com/u/mdc9001)\
**Post date:** [March 11, 2026, 2:17pm UTC](https://community.cesium.com/t/3d-gaussian-splat-ply-not-uploading/45321/12 "2026-03-11T14:17:55Z")

</div>

The NaN points (short for Not a Number) are invalid data values. They are likely caused by doing an invalid operation (such as dividing by zero). I will ask our team if they have any recommedations for how to filter out these points.

---

<div class="post-metadata">

**Author:** ![Marco13](https://sea2.discourse-cdn.com/cesium/user_avatar/community.cesium.com/marco13/32/2757_2.png) [@Marco13](https://community.cesium.com/u/Marco13)\
**Post date:** [March 11, 2026, 4:56pm UTC](https://community.cesium.com/t/3d-gaussian-splat-ply-not-uploading/45321/14 "2026-03-11T16:56:22Z")

</div>

Interestingly, dragging-and-dropping a PLY file with `NaN` or “infinity” positions into [https://superspl.at/editor](https://superspl.at/editor) loads the data and shows it, and _apparently_ already ignores these “invalid” points. However, when _exporting_ that data again, the result will still contain them (so apparently, they are only removed for the _visualization_, but are still contained in the data)

More generally: I’m not aware of any tool that is _dedicatedly_ focussed on this. However, such a cleanup operation should be fairly trivial to implement with every (generic) PLY reader/writer library.

**Not a recommendation:**  
Only a hint: I just created a snippet

```java
/*
 * www.javagl.de - JSplat
 *
 * Copyright 2026 Marco Hutter - http://www.javagl.de
 */
package de.javagl.jsplat.examples;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;
import java.util.function.Predicate;
import java.util.stream.Collectors;

import de.javagl.jsplat.MutableSplat;
import de.javagl.jsplat.Splat;
import de.javagl.jsplat.io.ply.PlySplatReader;
import de.javagl.jsplat.io.ply.PlySplatWriter;
import de.javagl.jsplat.io.ply.PlySplatWriter.PlyFormat;

public class SplatFilteringExample
{
    public static void main(String[] args) throws IOException
    {
        run("./data/invalid.ply", "./data/filtered.ply");
    }

    private static void run(String inputFileName, String outputFileName)
        throws IOException
    {
        PlySplatReader r = new PlySplatReader();
        List<MutableSplat> splats =
            r.readList(new FileInputStream(inputFileName));
        List<MutableSplat> filtered = filter(splats);
        PlySplatWriter w = new PlySplatWriter(PlyFormat.BINARY_LITTLE_ENDIAN);
        w.writeList(filtered, new FileOutputStream(outputFileName));
    }

    private static <T extends Splat> List<T> filter(List<T> splats)
    {
        Predicate<T> f = s ->
        {
            if (!Float.isFinite(s.getPositionX()))
            {
                return false;
            }
            if (!Float.isFinite(s.getPositionY()))
            {
                return false;
            }
            if (!Float.isFinite(s.getPositionZ()))
            {
                return false;
            }
            return true;
        };
        List<T> filtered =
            splats.stream().filter(f).collect(Collectors.toList());
        int numRemoved = splats.size() - filtered.size();
        System.out.println(
            "Removed " + numRemoved + " of " + splats.size() + " splats");
        return filtered;
    }
}

```

This is actually not specific for PLY, but it is based on [GitHub - javagl/JSplat: Java libraries for Gaussian splats · GitHub](https://github.com/javagl/JSplat) , and removes all splats with NaN- or infinite positions from a PLY file.

A similar functionality could be implemented in other environments.

(If the PLY file is not excessively large and can somehow be shared, I could run that cleanup pass on that)

---

<div class="post-metadata">

**Author:** ![islit](https://sea2.discourse-cdn.com/cesium/user_avatar/community.cesium.com/islit/32/28173_2.png) [@islit](https://community.cesium.com/u/islit)\
**Post date:** [March 11, 2026, 7:29pm UTC](https://community.cesium.com/t/3d-gaussian-splat-ply-not-uploading/45321/15 "2026-03-11T19:29:44Z")

</div>

thanks for looking into this! I have a sample .ply dataset that I have been trying to import into Cesium Ion, I’ll dm you with the link to the file so I can test it before jumping into a much larger 3DGS dataset. I’m not familiar enough with how to code a tool to remove NaN points, but if these can be filtered out automatically upon upload, that would remove a huge hurdle to getting 3DGS datasets to stream via Cesium

---

<div class="post-metadata">

**Author:** ![Marco13](https://sea2.discourse-cdn.com/cesium/user_avatar/community.cesium.com/marco13/32/2757_2.png) [@Marco13](https://community.cesium.com/u/Marco13)\
**Post date:** [March 11, 2026, 8:41pm UTC](https://community.cesium.com/t/3d-gaussian-splat-ply-not-uploading/45321/16 "2026-03-11T20:41:02Z")

</div>

I had a short look at the data set that you provided. There is _literally_ only a _single_ splat (out of 6.3 million splats!) that contains `NaN` for its position, scale, and rotation. Apart from that, the data set should be perfectly fine.

I agree that such cases should be handled more gracefully, and internally raised the issue that the upload should simply ignore these points (and maybe warn the user, saying something like “Ignored X of Y points due to invalid values” or so).

Until this is addressed, implemented, and rolled out, maybe there is another solution: You can apparently use `splat-transform` to filter out `NaN` values.

The process would be as follows:

- Install Node.js and npm if you don’t already have it, as described at [Downloading and installing Node.js and npm | npm Docs](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm/)
- Install ‘splat-transform’ from [GitHub - playcanvas/splat-transform: CLI tool for 3D Gaussian splat format conversion and transformation · GitHub](https://github.com/playcanvas/splat-transform) , with  
`npm install -g @playcanvas/splat-transform`
- Run the following command in the directory that contains your PLY file:  
`splat-transform point_cloud.ply --filter-nan point_cloud-filtered.ply`

This should write the `point_cloud-filtered.ply` file, _without_ the invalid values. This file can then be uploaded to Cesium ion.

**Note:** Right now, it will not be possible to render the result in CesiumJS, because of [Regression in splats from PLY in 1.135 · Issue #13041 · CesiumGS/cesium · GitHub](https://github.com/CesiumGS/cesium/issues/13041) . But there is a pending pull request at [Fix: Gaussian splat orientation and modelMatrix transform application by danielzhong · Pull Request #13245 · CesiumGS/cesium · GitHub](https://github.com/CesiumGS/cesium/pull/13245) that will hopefully be part of the next release.
