diff --git a/SDK/C/src/streams.cpp b/SDK/C/src/streams.cpp
index abf8a5f990ef58a1488a3ac12789ad1df57a319b..3c8b309ba0d42dbbc85eca3a5ebd2cf5fb689744 100644
--- a/SDK/C/src/streams.cpp
+++ b/SDK/C/src/streams.cpp
@@ -106,12 +106,15 @@ ftlError_t ftlImageWrite(
 		return FTLERROR_STREAM_DUPLICATE;
 
 	stream->sender->set("encoder_device", 2);  // Software encoder
+	stream->sender->set("lossless", true);
 
 	try {
 		auto &frame = stream->video_fs.frames[sourceId];
 		auto &img = frame.create<cv::cuda::GpuMat>(static_cast<ftl::codecs::Channel>(channel));
 		auto &intrin = frame.getLeft();
 
+		LOG(INFO) << "INTRIN: " << intrin.width << "x" << intrin.height << " for " << sourceId << ", " << (int)channel;
+
 		if (intrin.width == 0) {
 			return FTLERROR_STREAM_NO_INTRINSICS;
 		}
@@ -182,6 +185,8 @@ ftlError_t ftlIntrinsicsWriteLeft(ftlStream_t stream, int32_t sourceId, int32_t
 	stream->video_fs.frames[sourceId].setLeft(cam);
 	stream->has_fresh_data = true;
 
+	LOG(INFO) << "INTRIN " << f << "," << cx << "," << cy << "," << baseline;
+
 	return FTLERROR_OK;
 }
 
@@ -207,6 +212,8 @@ ftlError_t ftlIntrinsicsWriteRight(ftlStream_t stream, int32_t sourceId, int32_t
 	stream->video_fs.frames[sourceId].setRight(cam);
 	stream->has_fresh_data = true;
 
+	LOG(INFO) << "INTRINR " << f << "," << cx << "," << cy << "," << baseline;
+
 	return FTLERROR_OK;
 }
 
diff --git a/SDK/Python/blender_script.py b/SDK/Python/blender_script.py
index ce562f8622ce9d5e3b9f85b86c7dc598a2b2500e..753cabe50b33be598e1c55868ae0f29de14a5913 100644
--- a/SDK/Python/blender_script.py
+++ b/SDK/Python/blender_script.py
@@ -152,7 +152,7 @@ def render():
     
     # set invalid depth values to 0.0
     im[:,:,3][im[:,:,3] >= _d_max] = 0.0
-    return (im[:,:,0:2] * 255.0).astype(np.uint8), im[:,:,3]
+    return (im[:,:,0:3]*255.0).astype(np.uint8), (im[:,:,3]).astype(np.float32)
 
 def render_stereo(camera, baseline=0.15):
     bpy.context.scene.camera = camera
@@ -169,6 +169,7 @@ def render_stereo(camera, baseline=0.15):
     return StereoImage(np.array(K), pose, baseline, imL, depthL, imR, depthR)
 
 
+
 from ctypes import *
 ftl = CDLL('/home/nick/git-repos/ftl/build/SDK/C/libftl-dev.so.0')
 
@@ -180,6 +181,10 @@ ftlIntrinsicsWriteLeft = ftl.ftlIntrinsicsWriteLeft
 ftlIntrinsicsWriteLeft.restype = c_int
 ftlIntrinsicsWriteLeft.argtypes = [c_void_p, c_int, c_int, c_int, c_float, c_float, c_float, c_float, c_float, c_float]
 
+ftlIntrinsicsWriteRight = ftl.ftlIntrinsicsWriteRight
+ftlIntrinsicsWriteRight.restype = c_int
+ftlIntrinsicsWriteRight.argtypes = [c_void_p, c_int, c_int, c_int, c_float, c_float, c_float, c_float, c_float, c_float]
+
 ftlImageWrite = ftl.ftlImageWrite
 ftlImageWrite.restype = c_int
 ftlImageWrite.argtypes = [c_void_p, c_int, c_int, c_int, c_int, c_void_p]
@@ -196,9 +201,14 @@ resolution_x_in_px = scale * bpy.context.scene.render.resolution_x
 resolution_y_in_px = scale * bpy.context.scene.render.resolution_y
 
 err = ftlIntrinsicsWriteLeft(c_void_p(stream), c_int(0), c_int(int(resolution_x_in_px)), c_int(int(resolution_y_in_px)), c_float(300.0), c_float(-resolution_x_in_px/2), c_float(-resolution_y_in_px/2), c_float(0.1), c_float(0.1), c_float(8.0))
+err = ftlIntrinsicsWriteRight(c_void_p(stream), c_int(0), c_int(int(resolution_x_in_px)), c_int(int(resolution_y_in_px)), c_float(300.0), c_float(-resolution_x_in_px/2), c_float(-resolution_y_in_px/2), c_float(0.1), c_float(0.1), c_float(8.0))
 print(err)
 err = ftlImageWrite(stream, 0, 0, 3, 0, image.imL.ctypes.data_as(c_void_p))
 print(err)
+err = ftlImageWrite(stream, 0, 2, 3, 0, image.imR.ctypes.data_as(c_void_p))
+print(err)
+#err = ftlImageWrite(stream, 0, 1, 0, 0, image.depthL.ctypes.data_as(c_void_p))
+#print(err)
 err = ftlDestroyStream(stream)
 print(err)
 
diff --git a/components/codecs/src/opencv_decoder.cpp b/components/codecs/src/opencv_decoder.cpp
index 416b7d90f72a4d8e5f9513de9a1ec9a9c4559db4..be3c800d63611b940b0c1f2f4032b3681bdf6585 100644
--- a/components/codecs/src/opencv_decoder.cpp
+++ b/components/codecs/src/opencv_decoder.cpp
@@ -21,7 +21,7 @@ bool OpenCVDecoder::accepts(const ftl::codecs::Packet &pkt) {
 
 bool OpenCVDecoder::decode(const ftl::codecs::Packet &pkt, cv::cuda::GpuMat &out) {
 	//CHECK(cv::Size(ftl::codecs::getWidth(pkt.definition), ftl::codecs::getHeight(pkt.definition)) == out.size()); 
-	int chunk_dim = std::sqrt(pkt.frame_count);
+	int chunk_dim = 1; //std::sqrt(pkt.frame_count);
 	int chunk_width = out.cols / chunk_dim;
 	int chunk_height = out.rows / chunk_dim;
 
diff --git a/components/codecs/src/opencv_encoder.cpp b/components/codecs/src/opencv_encoder.cpp
index b930d04294878f9c3a43d5187a82e9725841a5ca..2d2e19b5698d10ee8fae1478d74d2eebaee43ebc 100644
--- a/components/codecs/src/opencv_encoder.cpp
+++ b/components/codecs/src/opencv_encoder.cpp
@@ -36,12 +36,19 @@ bool OpenCVEncoder::encode(const cv::cuda::GpuMat &in, ftl::codecs::Packet &pkt)
 		return false;
 	}
 
-	pkt.definition = (pkt.definition == definition_t::Any) ? ftl::codecs::findDefinition(in.cols, in.rows) : pkt.definition;
+	auto [tx,ty] = ftl::codecs::chooseTileConfig(pkt.frame_count);
+	pkt.definition = (pkt.definition == definition_t::Any) ? ftl::codecs::findDefinition(in.cols/tx, in.rows/ty) : pkt.definition;
+	if (pkt.definition == definition_t::Invalid || pkt.definition == definition_t::Any) {
+		LOG(ERROR) << "Could not find appropriate definition";
+		return false;
+	}
+
+	/*pkt.definition = (pkt.definition == definition_t::Any) ? ftl::codecs::findDefinition(in.cols, in.rows) : pkt.definition;
 
 	if (pkt.definition == definition_t::Invalid || pkt.definition == definition_t::Any) {
 		LOG(ERROR) << "Invalid definition";
 		return false;
-	}
+	}*/
 
 	// Ensure definition does not exceed max
 	current_definition_ = pkt.definition; //((int)pkt.definition < (int)max_definition) ? max_definition : pkt.definition;
@@ -62,7 +69,7 @@ bool OpenCVEncoder::encode(const cv::cuda::GpuMat &in, ftl::codecs::Packet &pkt)
 	} else {
 		
 	}*/
-	if (width != in.cols || height != in.rows) {
+	if (tx*width != in.cols || ty*height != in.rows) {
 		LOG(ERROR) << "Input does not match requested definition";
 		return false;
 	}