diff --git a/applications/gui/src/camera.cpp b/applications/gui/src/camera.cpp
index f12e38dbb02e1d4403eb3b951a678889779be06c..b735a5ea3372e08d23c464e1b0b65c54020bbd6f 100644
--- a/applications/gui/src/camera.cpp
+++ b/applications/gui/src/camera.cpp
@@ -437,6 +437,19 @@ void ftl::gui::Camera::_draw(std::vector<ftl::rgbd::FrameSet*> &fss) {
 		record_sender_->post(fs2);
 		record_stream_->select(0, Channels<0>(Channel::Colour));
 		f.swapTo(Channels<0>(Channel::Colour), frame_);
+	} else if (do_snapshot_) {
+		do_snapshot_ = false;
+		cv::Mat flipped;
+		cv::Mat im1;
+
+		frame_.get<cv::cuda::GpuMat>(Channel::Colour).download(im1);
+
+		{
+			//UNIQUE_LOCK(mutex_, lk);
+			cv::flip(im1, flipped, 0);
+		}
+		cv::cvtColor(flipped, flipped, cv::COLOR_BGRA2BGR);
+		cv::imwrite(snapshot_filename_, flipped);
 	}
 }
 
@@ -775,14 +788,16 @@ const void ftl::gui::Camera::captureFrame() {
 }
 
 void ftl::gui::Camera::snapshot(const std::string &filename) {
-	cv::Mat flipped;
+	/*cv::Mat flipped;
 
 	{
 		UNIQUE_LOCK(mutex_, lk);
 		//cv::flip(im1_, flipped, 0);
 	}
 	cv::cvtColor(flipped, flipped, cv::COLOR_BGRA2BGR);
-	cv::imwrite(filename, flipped);
+	cv::imwrite(filename, flipped);*/
+	snapshot_filename_ = filename;
+	do_snapshot_ = true;
 }
 
 void ftl::gui::Camera::startVideoRecording(const std::string &filename) {
diff --git a/applications/gui/src/camera.hpp b/applications/gui/src/camera.hpp
index 764a07b9509c08166c7c2e8839a3bc8f74f6dfea..be7b21476bce47b4d66fe5e1ee29012975cc5a45 100644
--- a/applications/gui/src/camera.hpp
+++ b/applications/gui/src/camera.hpp
@@ -147,6 +147,8 @@ class Camera {
 	float lerpSpeed_;
 	bool sdepth_;
 	bool pause_;
+	bool do_snapshot_ = false;
+	std::string snapshot_filename_;
 	ftl::codecs::Channel channel_;
 	ftl::codecs::Channels<0> channels_;