diff --git a/scripts/run.py b/scripts/run.py
index 5be1cc2dda4e4885ce3009242307ff24c2b8f4ba..d4e4383a4c95d567b223e08f350bdf5920a81810 100644
--- a/scripts/run.py
+++ b/scripts/run.py
@@ -71,17 +71,9 @@ def parse_args():
 if __name__ == "__main__":
 	args = parse_args()
 
-	if args.mode == "":
-		if args.scene in scenes_sdf:
-			args.mode = "sdf"
-		elif args.scene in scenes_nerf:
-			args.mode = "nerf"
-		elif args.scene in scenes_image:
-			args.mode = "image"
-		elif args.scene in scenes_volume:
-			args.mode = "volume"
-		else:
-			raise ValueError("Must specify either a valid '--mode' or '--scene' argument.")
+	args.mode = args.mode or mode_from_scene(args.scene) or mode_from_scene(args.load_snapshot)
+	if not args.mode:
+		raise ValueError("Must specify either a valid '--mode' or '--scene' argument.")
 
 	if args.mode == "sdf":
 		mode = ngp.TestbedMode.Sdf
diff --git a/scripts/scenes.py b/scripts/scenes.py
index 35e96b00a41688fc968271630830da511caccb8a..baa507d35ddf7a70012b32a24c3c8c18df709d7b 100644
--- a/scripts/scenes.py
+++ b/scripts/scenes.py
@@ -230,3 +230,15 @@ def default_snapshot_filename(scene):
 	if scene["dataset"]:
 		filename = f"{os.path.splitext(scene['dataset'])[0]}_{filename}"
 	return os.path.join(scene["data_dir"], filename)
+
+def mode_from_scene(scene):
+	if scene in scenes_sdf:
+		return "sdf"
+	elif scene in scenes_nerf:
+		return "nerf"
+	elif scene in scenes_image:
+		return "image"
+	elif scene in scenes_volume:
+		return "volume"
+	else:
+		return ""