diff --git a/include/ast_video_puller.hpp b/include/ast_video_puller.hpp
new file mode 100644
index 0000000..99c718b
--- /dev/null
+++ b/include/ast_video_puller.hpp
@@ -0,0 +1,80 @@
+#pragma once
+
+#include <vector>
+#include <assert.h>
+
+#include <ast_video_types.hpp>
+
+#include <video.h>
+#include <iostream>
+
+namespace AstVideo {
+class VideoPuller {
+ public:
+  VideoPuller() : image_info(){};
+
+  void initialize() {
+    std::cout << "Opening /dev/video\n";
+    video_fd = open("/dev/video", O_RDWR);
+    if (!video_fd) {
+      std::cout << "Failed to open /dev/video\n";
+      // TODO(Ed) throw exception?
+    } else {
+      std::cout << "Opened successfully\n";
+    }
+  }
+
+  RawVideoBuffer read_video() {
+    assert(video_fd != 0);
+    RawVideoBuffer raw;
+
+    IMAGE_INFO image_info{};
+    image_info.do_image_refresh = 1;  // full frame refresh
+    image_info.qc_valid = 0;          // quick cursor disabled
+    image_info.parameter.features.w = 0;
+    image_info.parameter.features.h = 0;
+    image_info.parameter.features.chrom_tbl = 0;  // level
+    image_info.parameter.features.lumin_tbl = 0;
+    image_info.parameter.features.jpg_fmt = 1;
+    image_info.parameter.features.buf =
+        reinterpret_cast<unsigned char *>(raw.buffer.data());
+    image_info.crypttype = -1;
+    std::cout << "Writing\n";
+
+    int status;
+    /*
+    status = write(video_fd, reinterpret_cast<char*>(&image_info),
+                        sizeof(image_info));
+    if (status != sizeof(image_info)) {
+      std::cout << "Write failed.  Return: " << status << "\n";
+      perror("perror output:");
+    }
+    
+    std::cout << "Write done\n";
+    */
+    std::cout << "Reading\n";
+    status = read(video_fd, reinterpret_cast<char *>(&image_info),
+                  sizeof(image_info));
+    std::cout << "Reading\n";
+
+    if (status != 0) {
+      std::cout << "Read failed with status " << status << "\n";
+    }
+
+    raw.buffer.resize(image_info.len);
+
+    raw.height = image_info.parameter.features.h;
+    raw.width = image_info.parameter.features.w;
+    if (image_info.parameter.features.jpg_fmt == 422) {
+      raw.mode = YuvMode::YUV420;
+    } else {
+      raw.mode = YuvMode::YUV444;
+    }
+    return raw;
+  }
+
+ private:
+  int video_fd;
+  IMAGE_INFO image_info;
+};
+}
