diff --git a/applications/reconstruct/src/main.cpp b/applications/reconstruct/src/main.cpp
index b8487d5b14873f0f1036cff626275e944d217833..65b92f6c9bfef76b86fac6d1c75468112ba25b3b 100644
--- a/applications/reconstruct/src/main.cpp
+++ b/applications/reconstruct/src/main.cpp
@@ -16,6 +16,7 @@
 #include <ftl/rgbd/group.hpp>
 #include <ftl/threads.hpp>
 #include <ftl/codecs/writer.hpp>
+#include <ftl/codecs/reader.hpp>
 
 #include "ilw/ilw.hpp"
 #include <ftl/render/splat_render.hpp>
@@ -110,9 +111,27 @@ static void run(ftl::Configurable *root) {
 		auto eix = path.find_last_of('.');
 		auto ext = path.substr(eix+1);
 
+		// Command line path is ftl file
 		if (ext == "ftl") {
 			LOG(INFO) << "PATH TO CHECK: " << path;
-			root->getConfig()["sources"].push_back(nlohmann::json{{"uri",std::string("file://") + path + std::string("#0")}});
+
+			// Create temp reader to count number of sources found in file
+			std::ifstream file;
+			file.open(path);
+			ftl::codecs::Reader reader(file);
+			reader.begin();
+
+			int max_stream = 0;
+			reader.read(reader.getStartTime()+100, [&max_stream](const ftl::codecs::StreamPacket &spkt, const ftl::codecs::Packet &pkt) {
+				max_stream = max(max_stream, spkt.streamID);
+			});
+			reader.end();
+
+			LOG(INFO) << "Found " << (max_stream+1) << " sources in " << path;
+
+			for (int i=0; i<max_stream; ++i) {
+				root->getConfig()["sources"].push_back(nlohmann::json{{"uri",std::string("file://") + path + std::string("#") + std::to_string(i)}});
+			}
 		}
 	}
 	LOG(INFO) << (*root->get<nlohmann::json>("sources")).dump();