diff --git a/components/codecs/include/ftl/codecs/nvpipe_decoder.hpp b/components/codecs/include/ftl/codecs/nvpipe_decoder.hpp
index bb966c13032b592708be16d1a102511ee83194b3..e663c8551304069ca4d023c064afa16629095320 100644
--- a/components/codecs/include/ftl/codecs/nvpipe_decoder.hpp
+++ b/components/codecs/include/ftl/codecs/nvpipe_decoder.hpp
@@ -30,6 +30,8 @@ class NvPipeDecoder : public ftl::codecs::Decoder {
 	cv::cuda::GpuMat tmp_;
 	int width_;
 	int height_;
+	int last_width_;
+	int last_height_;
 	int n_;
 
 	bool _create(const ftl::codecs::Packet &pkt);
diff --git a/components/codecs/src/nvpipe_decoder.cpp b/components/codecs/src/nvpipe_decoder.cpp
index a64a009a211a94d46c2088b8f244f53a62b9fc30..3317a0c00c7e56c0c5e963c06b01b0018f8be22d 100644
--- a/components/codecs/src/nvpipe_decoder.cpp
+++ b/components/codecs/src/nvpipe_decoder.cpp
@@ -66,7 +66,9 @@ bool NvPipeDecoder::_create(const ftl::codecs::Packet &pkt) {
 	bool is_float_frame = pkt.flags & ftl::codecs::kFlagFloat;
 
 	// Check existing decoder is valid first and remove if not
-	if (nv_decoder_ != nullptr && (last_definition_ != pkt.definition || last_codec_ != pkt.codec || is_float_channel_ != is_float_frame)) {
+	if (nv_decoder_ != nullptr && (last_definition_ != pkt.definition ||
+			last_codec_ != pkt.codec || is_float_channel_ != is_float_frame ||
+			width_ != last_width_ || height_ != last_height_)) {
 		delete nv_decoder_;
 		nv_decoder_ = nullptr;
 	}
@@ -163,6 +165,8 @@ bool NvPipeDecoder::decode(const ftl::codecs::Packet &pkt, cv::cuda::GpuMat &out
 	is_float_channel_ = is_float_frame;
 	last_definition_ = pkt.definition;
 	last_codec_ = pkt.codec;
+	last_width_ = width_;
+	last_height_ = height_;
 
 	// Build a decoder instance of the correct kind
 	/*if (nv_decoder_ == nullptr) {