diff --git a/IO/Import/Testing/Cxx/CMakeLists.txt b/IO/Import/Testing/Cxx/CMakeLists.txt
index adbc456562801b2d364facd6f040f3e0a54a7a50..76cc48a52377dcae9183fe38b55136e1aa19562a 100644
--- a/IO/Import/Testing/Cxx/CMakeLists.txt
+++ b/IO/Import/Testing/Cxx/CMakeLists.txt
@@ -98,32 +98,41 @@ vtk_add_test_cxx(vtkIOImportCxxTests tests
   )
 
 vtk_add_test_cxx(vtkIOImportCxxTests tests
-  TestGLTFImporter,TestGLTFImporter.cxx DATA{../Data/glTF/Avocado/Avocado.glb} -1 1 0 0
+  TestGLTFImporter,TestGLTFImporter.cxx DATA{../Data/glTF/Avocado/Avocado.glb} 0 -1 1 0 0
+)
+
+vtk_add_test_cxx(vtkIOImportCxxTests tests
+  TestGLTFImporterStream,TestGLTFImporter.cxx DATA{../Data/glTF/Avocado/Avocado.glb} 1 -1 1 0 0
+)
+
+vtk_add_test_cxx(vtkIOImportCxxTests tests
+  LOOSE_VALID
+  TestGLTFImporterPBR,TestGLTFImporter.cxx DATA{../Data/glTF/WaterBottle/WaterBottle.glb} 0 -1 1 0 0
 )
 
 vtk_add_test_cxx(vtkIOImportCxxTests tests
   LOOSE_VALID
-  TestGLTFImporterPBR,TestGLTFImporter.cxx DATA{../Data/glTF/WaterBottle/WaterBottle.glb} -1 1 0 0
+  TestGLTFImporterPBRStream,TestGLTFImporter.cxx DATA{../Data/glTF/WaterBottle/WaterBottle.glb} 1 -1 1 0 0
 )
 
 vtk_add_test_cxx(vtkIOImportCxxTests tests
-  TestGLTFImporterKHRLightsPunctual,TestGLTFImporter.cxx DATA{../Data/glTF/Lights/lights.gltf} 0 1 5 1
+  TestGLTFImporterKHRLightsPunctual,TestGLTFImporter.cxx DATA{../Data/glTF/Lights/lights.gltf} 0 0 1 5 1
 )
 
 vtk_add_test_cxx(vtkIOImportCxxTests tests
-  TestGLTFImporterCamera,TestGLTFImporter.cxx DATA{../Data/glTF/Cameras/Cameras.gltf} 1 1 0 2
+  TestGLTFImporterCamera,TestGLTFImporter.cxx DATA{../Data/glTF/Cameras/Cameras.gltf} 0 1 1 0 2
 )
 
 vtk_add_test_cxx(vtkIOImportCxxTests tests
-  TestGLTFImporterUnlit,TestGLTFImporter.cxx DATA{../Data/glTF/UnlitTest/UnlitTest.glb} -1 2 0 0
+  TestGLTFImporterUnlit,TestGLTFImporter.cxx DATA{../Data/glTF/UnlitTest/UnlitTest.glb} 0 -1 2 0 0
 )
 
 vtk_add_test_cxx(vtkIOImportCxxTests tests
-  TestGLTFImporterArmature,TestGLTFImporter.cxx DATA{../Data/glTF/Armature.gltf} -1 1 0 0
+  TestGLTFImporterArmature,TestGLTFImporter.cxx DATA{../Data/glTF/Armature.gltf} 0 -1 1 0 0
 )
 
 vtk_add_test_cxx(vtkIOImportCxxTests tests
-  TestGLTFImporterURITexture,TestGLTFImporter.cxx DATA{../Data/glTF/Lantern/Lantern.gltf} -1 3 0 0
+  TestGLTFImporterURITexture,TestGLTFImporter.cxx DATA{../Data/glTF/Lantern/Lantern.gltf} 0 -1 3 0 0
    DATA{../Data/glTF/Lantern/Lantern.bin}
    DATA{../Data/glTF/Lantern/Lantern_baseColor.png}
    DATA{../Data/glTF/Lantern/Lantern_emissive.png}
diff --git a/IO/Import/Testing/Cxx/TestGLTFImporter.cxx b/IO/Import/Testing/Cxx/TestGLTFImporter.cxx
index 400a08d27072a693d0acf7d2cf3aca62ffe88a28..428a1804b0b9f34390f2da72aedbaef6919f76c4 100644
--- a/IO/Import/Testing/Cxx/TestGLTFImporter.cxx
+++ b/IO/Import/Testing/Cxx/TestGLTFImporter.cxx
@@ -1,6 +1,7 @@
 // SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
 // SPDX-License-Identifier: BSD-3-Clause
 
+#include <vtkFileResourceStream.h>
 #include <vtkGLTFImporter.h>
 #include <vtkLightCollection.h>
 #include <vtkRegressionTestImage.h>
@@ -11,19 +12,42 @@
 
 int TestGLTFImporter(int argc, char* argv[])
 {
-  if (argc < 6)
+  if (argc < 7)
   {
-    std::cout << "Usage: " << argv[0]
-              << " <gltf file> <camera index> <expected nb of actors> <expected nb of lights> "
-                 "<expected nb of cameras>"
-              << std::endl;
+    std::cout
+      << "Usage: " << argv[0]
+      << " <gltf file> <use_stream> <camera index> <expected nb of actors> <expected nb of lights> "
+         "<expected nb of cameras>"
+      << std::endl;
     return EXIT_FAILURE;
   }
 
-  vtkIdType cameraIndex = atoi(argv[2]);
+  vtkIdType cameraIndex = atoi(argv[3]);
 
   vtkNew<vtkGLTFImporter> importer;
-  importer->SetFileName(argv[1]);
+  if (atoi(argv[2]) > 0)
+  {
+    bool is_binary = false;
+    std::string extension = vtksys::SystemTools::GetFilenameLastExtension(argv[1]);
+    if (extension == ".glb")
+    {
+      is_binary = true;
+    }
+    vtkNew<vtkFileResourceStream> file;
+    file->Open(argv[1]);
+    if (file->EndOfStream())
+    {
+      std::cerr << "Can not open test file " << argv[1] << std::endl;
+      return EXIT_FAILURE;
+    }
+    importer->SetStream(file);
+    importer->SetStreamIsBinary(is_binary);
+  }
+  else
+  {
+    importer->SetFileName(argv[1]);
+  }
+
   importer->ImportArmatureOn();
 
   vtkNew<vtkRenderWindow> renderWindow;
@@ -43,19 +67,19 @@ int TestGLTFImporter(int argc, char* argv[])
     return EXIT_FAILURE;
   }
 
-  if (importer->GetImportedActors()->GetNumberOfItems() != atoi(argv[3]))
+  if (importer->GetImportedActors()->GetNumberOfItems() != atoi(argv[4]))
   {
     std::cerr << "ERROR: Unexpected number of imported actors: "
               << importer->GetImportedActors()->GetNumberOfItems() << "\n";
     return EXIT_FAILURE;
   }
-  if (importer->GetImportedLights()->GetNumberOfItems() != atoi(argv[4]))
+  if (importer->GetImportedLights()->GetNumberOfItems() != atoi(argv[5]))
   {
     std::cerr << "ERROR: Unexpected number of imported lights: "
               << importer->GetImportedActors()->GetNumberOfItems() << "\n";
     return EXIT_FAILURE;
   }
-  if (importer->GetImportedCameras()->GetNumberOfItems() != atoi(argv[5]))
+  if (importer->GetImportedCameras()->GetNumberOfItems() != atoi(argv[6]))
   {
     std::cerr << "ERROR: Unexpected number of imported cameras: "
               << importer->GetImportedActors()->GetNumberOfItems() << "\n";
diff --git a/IO/Import/Testing/Data/Baseline/TestGLTFImporterPBRStream.png.sha512 b/IO/Import/Testing/Data/Baseline/TestGLTFImporterPBRStream.png.sha512
new file mode 100644
index 0000000000000000000000000000000000000000..62bcd42965736512ddb48103aa12fab14da064af
--- /dev/null
+++ b/IO/Import/Testing/Data/Baseline/TestGLTFImporterPBRStream.png.sha512
@@ -0,0 +1 @@
+c59b73eff93b98942a8bd18743d71ca6d0d4de001c0c0765a7684b0bc4ca1d3b8b46805854b1f77616407fbdc8fcded7ea777cff4ea511a585a6864970ae5d71
diff --git a/IO/Import/Testing/Data/Baseline/TestGLTFImporterStream.png.sha512 b/IO/Import/Testing/Data/Baseline/TestGLTFImporterStream.png.sha512
new file mode 100644
index 0000000000000000000000000000000000000000..3178a03cbab456700f1943e79e0c9efdde10fb4a
--- /dev/null
+++ b/IO/Import/Testing/Data/Baseline/TestGLTFImporterStream.png.sha512
@@ -0,0 +1 @@
+a40ba06e652140ed031e7cda5597b2cfa84b42ab2ae05ca068c015432e5302f00c72bea03b2bb9e6532181fb0a33ec4abc7f178ad2292d57cb82d6bc9ee97bf7