diff --git a/README.md b/README.md
index cc7c7d7e7bf50b2166785c0eeedb04c79995fb05..9a299f763c209b5a5401321fa737794177f8c45b 100644
--- a/README.md
+++ b/README.md
@@ -18,16 +18,21 @@ use komodo.nu [
 ]
 use binary.nu [ "bytes decode" ]
 
-let bytes = open komodo.nu
+use std assert
 
 komodo build
 
+let bytes = "tests/dragoon_32x32.png"
+
 komodo setup $bytes
 
 komodo prove $bytes --fec-params {k: 3, n: 5}
 komodo verify blocks/0.bin blocks/1.bin
 
-(komodo reconstruct blocks/0.bin blocks/2.bin blocks/3.bin | bytes decode) == $bytes
+let actual = komodo reconstruct blocks/0.bin blocks/2.bin blocks/3.bin | bytes decode
+let expected = open $bytes | into binary | to text | from json | bytes decode
+assert equal $actual $expected
+print "reconstruction was successful"
 ```
 
 `true` should be printed at the end :thumbsup:
diff --git a/komodo.nu b/komodo.nu
index 92dd8b05697f919d93bf969253f35cd810038f7a..752b87e973b99f39dbd48004eb985212f24cff38 100644
--- a/komodo.nu
+++ b/komodo.nu
@@ -11,7 +11,7 @@ def "nu-complete log-levels" []: nothing -> list<string> {
 }
 
 def run-komodo [
-    args: record<bytes: string, k: int, n: int, do_generate_powers: bool, powers_file: path, do_reconstruct_data: bool, do_verify_blocks: bool, block_files: list<string>>,
+    args: record<bytes: path, k: int, n: int, do_generate_powers: bool, powers_file: path, do_reconstruct_data: bool, do_verify_blocks: bool, block_files: list<string>>,
     --log-level: string,
 ]: nothing -> any {
     with-env {RUST_LOG: $log_level} {
@@ -37,7 +37,7 @@ export def "komodo build" [] {
 }
 
 export def "komodo setup" [
-    bytes: string,
+    bytes: path,
     --powers-file: path = "powers.bin",
     --log-level: string@"nu-complete log-levels" = "INFO"
 ]: nothing -> nothing {
@@ -54,7 +54,7 @@ export def "komodo setup" [
 }
 
 export def "komodo prove" [
-    bytes: string,
+    bytes: path,
     --fec-params: record<k: int, n: int>,
     --powers-file: path = "powers.bin",
     --log-level: string@"nu-complete log-levels" = "INFO"
diff --git a/src/main.rs b/src/main.rs
index 6a7330418327f599c7bb653056e25c3d1b290f1c..f35deff1a157bc304c21af2b5c60ae2ff8d70a31 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -24,11 +24,14 @@ const VALIDATE: Validate = Validate::Yes;
 const BLOCK_DIR: &str = "blocks/";
 
 fn parse_args() -> (Vec<u8>, usize, usize, bool, String, bool, bool, Vec<String>) {
-    let bytes = std::env::args()
+    let bytes_path = std::env::args()
         .nth(1)
-        .expect("expected bytes as first positional argument")
-        .as_bytes()
-        .to_vec();
+        .expect("expected path to bytes as first positional argument");
+    let bytes = if bytes_path.is_empty() {
+        vec![]
+    } else {
+        std::fs::read(bytes_path).unwrap()
+    };
     let k: usize = std::env::args()
         .nth(2)
         .expect("expected k as second positional argument")