For AFGANG 2015 I am showing a digital image encoded in DNA. In the exhibition there is a container with 37 mg isolated DNA as well as a projection of the image stored in DNA.
The image shows a pixelated b/w landscape saved as a highly compressed JPEG. It has a small number of pixels and only takes up 884 bytes. It is composed of thousands of pixels made by resizing digital photos to a single b/w pixel. In this reduction close to all visible information is lost and left is only the amount of light captured by the cameras. Still, a large number of circumstances have determined the exact grey tone of the pixel, but none of them can be traced back.
All the photos were captured between 2003 and 2015 by digital cameras I have owned.
Encoding digital information in DNA:
The idea of storing non-biological information in DNA dates back more than 50 years but was not actualised before 1988 when artist Joe Davis encoded a 35 bit icon in 28 base pairs of DNA. i
Jumping to 2012 George M. Church and his team managed to encode and read back 5.27 megabit (around 659 kilobytes) including digital photos, text and a Javascript. This was the first time more than a kilobyte was stored in DNA. ii
Later in 2013 Nick Goldman and his team stored a similar amount of information and published an improved DNA-storage method that should be possible to scale up beyond current information volumes. The publication also offered a new system of error-correction.iii
The general idea of translating binary code into a DNA sequence is relatively simple.
As known binary information consists of zeros and ones and DNA consists of 4 bases: A, C, G and T.
Lets say we want to translate 3 bytes: 00011011 10001101 00001111
One possibility is to decide that A and C equals zero and G and T equals one.
Now 1 base in DNA holds the same information as 1 bit.
The 3 bytes could now look like this: ACAGTCGT GACATGCT ACACGTGT
An other possibility is to decide that A = 00, C = 01, G = 10 and T = 11.
Now 1 base in DNA will hold the same information as 2 bits.
The sequence will now be the following: ACGT GATC AATT
In practice the process is much more complicated and requires a lot of technical knowledge. I collaborated with two friends, Hans Jasper Genee and Lars Rønn Olsen, who works with bioengineering and bioinformatics.
We first hoped to store the image in a single string of DNA and then amplify it to the largest possible number of copies. It turned out to be very difficult to synthesize a DNA string of more than 1000 base pairs (bp) as the complexity of the coding grows rapidly. In order to synthesize a DNA sequence it has to be without repetition, which is hard to avoid when the information is translated from a binary code.
In the end we used a method similar to what Nick Goldman published in 2013. We translated 7072 bits into 76 DNA sequences of roughly 60 bp – in total 4525 bp. For practical reasons we did not index the sequences or use a system for error-correction – so reading back the information will be a challenge but should however be possibly.
The 76 DNA sequences were send to a lab in Belgium that synthesized the DNA. We received the fragments of DNA in 76 containers. In a laboratory we dissolved the DNA fragments in water and mixed them together. When the water evaporated the DNA had crystallised.
Even though the DNA only has a mass of 37 mg it contains around 20 Quadrillion (10^15) copies of the digital image. If the same number of copies of the binary code were to be stored it would take up more than 17 million terabyte.
If the DNA is kept dry and cold it will be preserved for a long time. If stored in a synthetic fossil it can last for 2000 year in normal temperatures or more than a million years at -18°C. iv
i http://blogs.scientificamerican.com/oscillator/dna-code/
ii Next-Generation Digital Information Storage in DNA – George M. Church, Yuan Gao & Sriram Kosuri
iii Towards practical, high-capacity, low-maintenance information storage in synthesized DNA – Nick Goldman, Paul Bertone, Siyuan Chen, Christophe Dessimoz, Emily M. LeProust, Botond Sipos & Ewan Birney
iv Robust Chemical Preservation of Digital Information on DNA in Silica with Error-Correcting Codes – Robert N. Grass, Reinhard Heckel, Michela Puddu, Daniela Paunescu1 & Wendelin J. Stark
Meta data:
156 GB: 39.578 digital photos captured from 2003 to 2015 by 16 digital cameras.
523.6 MB: 39.578 image files with 1 b/w pixel
2.4 MB: 1 PSD file with 39.578 pixel imported
884 B: 1 JPEG, 128 x 72 pixel
4525 bp: 1 JPEG, 128 x 72 pixel
8,91425 x 10^19 bp: 20 x 10^15 copies of 1 JPEG, 128 x 72 pixel
37 mg isolated DNA (2 mg used for samples)
Binary code:
11111111 11011000 11111111 11100000 00000000 00010000 01001010 01000110 01001001 01000110 00000000 00000001 00000001 00000001 00000000 01001000 00000000 01001000 00000000 00000000 11111111 11011011 00000000 01000011 00000000 00010000 00001011 00001100 00001110 00001100 00001010 00010000 00001110 00001101 00001110 00010010 00010001 00010000 00010011 00011000 00101000 00011010 00011000 00010110 00010110 00011000 00110001 00100011 00100101 00011101 00101000 00111010 00110011 00111101 00111100 00111001 00110011 00111000 00110111 01000000 01001000 01011100 01001110 01000000 01000100 01010111 01000101 00110111 00111000 01010000 01101101 01010001 01010111 01011111 01100010 01100111 01101000 01100111 00111110 01001101 01110001 01111001 01110000 01100100 01111000 01011100 01100101 01100111 01100011 11111111 11000000 00000000 00001011 00001000 00000000 01001000 00000000 10000000 00000001 00000001 00010001 00000000 11111111 11000100 00000000 00011011 00000000 00000000 00000011 00000001 00000001 00000001 00000001 00000001 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000010 00000011 00000100 00000001 00000101 00000110 00000111 11111111 11000100 00000000 00111110 00010000 00000000 00000001 00000010 00000011 00000101 00000001 00001011 00001010 00000101 00000101 00000000 00000000 00000000 00000000 00000000 00000000 00000010 00000000 00000011 00010010 00010011 00100010 00000001 00000100 00110010 01000010 11110000 00100011 00010001 00010100 00100001 01000001 01010010 01100001 01100010 01110010 10010001 10110001 11010001 00000101 00110001 00110011 01000011 01010001 10000001 10000010 10010010 10100010 10110010 01100011 01110001 10000011 10100001 11110001 01000100 01010011 10100011 11000001 11010010 11111111 11011010 00000000 00001000 00000001 00000001 00000000 00000000 00111111 00000000 11111001 11100001 10000001 10111011 10111110 11001011 00101001 10001101 00011111 00000101 10001011 00001010 01000100 00100001 00001001 11010000 10000101 01011001 01101011 11010001 00010111 00110011 10101110 11011101 10011011 00111100 10011000 11010110 11000001 00010000 10010111 01000011 10110100 01101011 01011111 10010010 10101000 10001100 01010100 01100111 11100100 00101111 01110111 11001001 10000011 10110011 01101101 01111010 10001101 00111001 10110011 01011111 10011001 00111011 10110000 10111011 10110110 11010110 01110010 10000110 00001110 11001101 01111110 11001010 00001010 01100100 10100110 10000100 11110000 10100001 00111100 10110101 01010110 10011011 01011010 10011010 11011010 10101110 10101101 01101101 00110111 00010101 01111000 00000011 11011111 10001011 11011000 10011010 01011011 00100011 11101011 01111011 11010110 10001000 01000000 10101011 00000111 01110000 11111100 11010000 11101011 01110011 10110101 01111010 10111110 01001100 00100101 00010001 01110000 11010111 11001010 01011110 11011011 10110000 00101111 10001100 00000011 01010100 01000011 00001111 01110110 11101101 10111111 01010110 11101111 11111010 11100000 01010000 01000010 10010010 11101100 10110101 11000100 11110010 11010011 01001011 01001110 11010011 01101011 01001010 11010100 01010000 01001011 10000001 01001100 01100011 00011010 00010101 01001000 10000010 01011100 00000111 10001111 10101111 01001110 10110101 11001100 10101000 01010001 10001101 00011001 11000101 00111100 11000100 01001100 01011110 01110011 11100010 01100101 11100101 00001010 11101011 00110001 10010111 00000101 01111101 00001011 00111011 10101100 01010000 01000010 11001000 10101010 10011101 10100110 11010011 10101101 01110010 11100101 00101101 10100010 00110001 01010000 10110010 10010011 01110010 10101000 00111010 00100001 01010011 01010111 00100010 00001001 01110000 00011110 00111110 10111101 00111010 11010111 00110010 11001110 11010001 00000100 11001000 11000001 00101011 10101111 00100110 10011110 10001001 11101010 00001100 00111001 00001101 11100010 11110000 01100110 11010110 00010000 11111001 01111100 11001000 01100010 00001101 11101111 00110111 10100001 11010101 11100010 01011100 01101001 11000011 00101011 11000011 10000000 01111100 10111111 11100001 01001101 10101001 11001101 01111010 00010100 01001011 01111001 11010101 10110010 01011011 00101110 11011101 11010001 00101110 01010111 11101001 00100100 10011001 00110111 01100100 10011101 10001101 10101110 11111000 10010010 10110110 10111110 11110000 01100011 11111011 00110101 10101110 00000101 11100100 00010101 11100100 00111110 00111100 10001000 00010111 10001101 11010111 00110110 11001010 01100100 11100100 00101011 10010011 10010001 00110001 00010011 10010101 11011010 01101100 00100110 01011111 00111001 01100000 00011111 00110010 11011110 11001101 11001100 00101101 00001001 01000110 11101011 10010100 11101100 10001110 00001100 00110100 11010011 10101110 00000101 00101001 00101100 11110101 00110101 11000111 10111000 01011010 11110111 10101110 10001011 01100110 00111111 11010100 11000111 11010100 00001100 00111101 10110110 11110000 10101010 10001011 01101100 10111011 11101001 10011101 11111111 00000000 00001101 10111101 11111011 10101001 10001000 10101110 11000010 11011100 00001100 10111011 00011111 01011100 00101101 11110001 01011001 11000100 01001111 00011110 11010011 11111000 01011000 11011101 10111101 10000011 01010100 00000101 01100111 11110100 10101000 00001001 00011001 01011110 00100011 01111011 00011110 10111101 10001011 10100101 10111001 10000000 01101111 00101100 00000000 00001111 01011101 01110000 10000100 10001101 11001000 00000010 11111100 11000001 11000101 11010111 11111111 00000000 10010101 11010111 11000100 11000001 11000111 00001011 00100100 01100110 00100011 10001111 11011111 11011001 11100110 01011001 11100010 01000100 01001000 10001001 00010001 00101111 01000010 00011000 10100110 01011110 00100110 11010001 01001100 00011101 00101010 00001011 11000011 10001101 01001000 01011110 00110110 00011011 01101100 00000001 11001010 00111100 01101100 10110010 11011110 01111110 01111110 00100101 00111101 11110010 11110110 01111111 10110000 00111011 11010111 00001010 11111110 11110001 01001100 10000010 10011000 10111111 00000100 01111100 00010010 10001101 11100101 11010010 10100000 10100100 01100010 11100100 01011001 10101110 11000100 01101111 10010111 10001010 10001010 00000011 11110100 01101100 01001010 00100100 01111001 11011101 11111010 11101100 11110001 01010111 00100111 11011110 11011001 10000110 11111001 10100000 01111110 11010100 10000010 11100110 11010011 11010010 00000001 11011001 10101110 00101011 01110111 01110101 11000000 10010100 10001001 10011001 10011110 10101111 10101111 10101110 00000101 00000010 00011000 01110000 00111011 00011010 00001000 10001100 01110001 10100100 10001001 00010001 00100010 00100100 01000100 10111101 01100001 00010000 01101010 01100011 01011001 11110110 01111001 00111111 00001110 11011111 00011101 01110001 11100011 00100110 11011110 00011100 00011000 00100000 00011100 11111100 11011111 10011101 10001010 00000100 00101111 00010111 10101010 01110011 11110111 01000100 10110111 01011010 10101000 11011010 10100111 10100110 00010110 10100101 10011000 01111000 00000001 11011010 00010111 00001000 10001111 00111010 00000100 10111001 00001011 10110011 00001101 00100001 00010100 01001001 11100001 10000101 10110100 10110110 00010001 00001000 01010101 11100110 01011100 00100010 00000100 01000100 10001000 10010001 00010010 00100010 01011110 11111000 10001000 11101111 11000111 00001011 10010101 01010001 01110111 01110111 00101100 11001110 10010100 01011011 01010000 01110010 10001000 00000111 10111001 01001001 10100111 00001100 10101111 00011111 00011010 10111000 10001110 01000100 10110000 11100111 11000111 01011010 00001001 10110000 00101011 10111011 10011011 00111100 10001010 01000101 01110110 01100111 11111011 01011111 01011101 10101001 00001010 11100100 01110010 11100011 00000111 01011011 11111000 11110101 01101010 10000001 01011101 11001100 01101011 11011001 10011010 10000110 00010111 00010000 10001000 10010001 00010010 00100010 01000100 01001001 01010111 11111111 11011001
DNA sequences:
1: TCTGCGATACAGATGAGATCATGTCACTAGCTGCGACAGCACGACTATCATGCGACGACG
2: TAGTACGACGCATAGCGAGTGCACTGTCTATGCGATGCGATCTGCTAGTGCATAGACAGA
3: TGCGATAGTCATGATGATACTCGACGATACTGCGTCACTAGACTACGCGCTCGACGATCA
4: CTGCTCACTAGAGAGATACATCATGTGAGAGCGTGCACATATATGTGTATGTCGAGTGCA
5: GCTATCATGCGCTGCACACGCTAGACATGCACGTACATATAGACTCGCGCACTGCAGATA
6: CTGATAGACTATACTATGTACTGATCGTCAGCATGATCGCATCTGTGCGAGCGAGAGTGA
7: GATCATCATGAGCGATGTCGTGACATATACGCTATGCAGCGTCAGACTAGCATGAGAGCT
8: ATGCTACTACACTATACACGTCGCTATACGATGAGCACTGTCATGTCATGATGCACGCAT
9: GTCACTCGCATAGTGTACGTCGTACTACTGCTCATGTCAGATGCGATCATGTCGTGCTGC
10: ACTGCACTACAGACGACGTAGTACGACGTAGTACGACGCATAGCATAGCATAGCATAGCA
11: TAGCATAGCATAGCATAGCATAGCATAGAGCACGTGAGCGCATACTACGTGCACATCTGC
12: AGACAGATGCGATCATGTCATGATATAGTCATGTCGTCGTCTGCGTATCTACATGTAGTA
13: TGCTGCATACTACATGTATGCATGTCATGTCATGTCATGTCATGTCATGTCTCATATGCG
14: ACGCTCTGATAGAGAGCACTCGTCGTGTGCAGAGTCACTACTGCGACATGAGCAGATCAG
15: AGTAGACACATGAGTACTCTGCACTAGTCGAGAGCGCTGTGATACGTATGCGACTCGAGT
16: GACAGAGATCAGTACGCGAGATAGTGCGCTCTATCGTACTGTCGATACAGCATAGCTCGT
17: ATCGTCTGCTATCACTACGTCTGACGCTCATCGATCATGTCATACACGACGTAGTATGCG
18: ATGCGATCGACATGTCGCGCGACGTCTACGTACTCACTGCAGAGATGCTCGAGCGCGTAG
19: TACATGACGCTGCGTCAGTAGACGAGTGACGCGATATCTCAGCTAGAGACGATACGTAGC
20: ACTCGCTGAGTACGCGTCGTGTACATGCATGAGCACGTACGATAGTCAGACAGTGAGTGT
21: CAGAGTAGATAGCGACATACGCTGCTGCGAGCGCTATGCAGCTATCATACACTAGTCGTA
22: TCAGTAGTCTATCATGCACTCACACACTCTACTAGATAGAGTGTGCACAGTATACGTCTG
23: ATATGATGTAGTCGAGACATCGACGAGTCGACTCAGCTCATGTAGCAGTATCGAGCACAG
24: ATGTCATAGCGTATGATGCTGCTATAGTATCGATATATGAGTCAGATCTATCTAGAGTGA
25: TGCTCATCATCTACACGTGAGCGTGTCGTGACTGTATATGACTGTGTGCAGTAGTCGCTC
26: TCATACTCTATACTGATATAGCATCTAGCTATGAGACACTGTACTAGACATGATGCTGCA
27: TGTAGCATGACGTGACAGATGAGATCGCGAGAGATCTGCATGAGACTATACACGTGATGA
28: TGATACAGATAGATCGCTCGCGACGAGCGTCGCTGACACATCGCTCACGCACACTCTGAG
29: CGAGCGACGCGACATGCGCAGCATCACTGACAGATCTGACAGTGCTATGTCTGACTCTAC
30: AGCACTCGAGATAGATCGCAGTACGCTACGTACTGCTCTCAGCAGCGAGTGTCTCTATAC
31: ATGAGTATGTAGCATGACATAGCATCGCTGTGTACAGATCAGATATCAGCTGAGCGTACA
32: TGTCAGCTACGCATGAGACATGTGTAGCGTAGCTCAGCACGACGACTAGTCTGAGTGTAT
33: GCGTACGCATCATGCACAGACGCAGCGAGCGACGTACTCATCATACTGTGACTCTCAGTG
34: AGTCTAGTCAGATCGATCGCGCTCGACTCTGTCTCGCTAGAGACTAGTCACGTGCGTGAG
35: TAGAGCAGTGATGCATAGACAGTAGCTATGCAGTGCATCACATGACGCGTGACTCTCTCT
36: AGTCTCGATACGCGCATACGAGTACGAGAGCAGCATGAGCTCGCACATACTCACAGCTGT
37: AGTGTCTATATCGCGTCTGCGATATATCATACACTAGTGTGTGCATGCGTAGATGTCGTG
38: TGAGATACATGAGCATAGCAGCGTATACTCGCGTGTGACTGTCGAGATGATAGTATACGC
39: ATGCATCGCGACGTCGATCTGTCATCTAGTGCATGTGATCTGACATGCAGAGCTGTAGTG
40: ACGATATACAGTACGCGATACGTATCGCTGCACTATGCTGATCTATATGCTCATGACGTA
41: GCGAGCGCTGAGTCACACACTATCACATAGCATCATAGTACTGCGTACTGATGATCTACG
42: CATGCAGCTGATGATGCTGATGCTGTACGCAGAGTGTAGCAGATATAGAGAGACTGATCT
43: GCAGTATGCTGAGAGCAGAGACTCTGTAGTCTCTCTCATACGACTGACAGTCTCAGAGAT
44: AGTGTCTACTATACGACTCTAGTCGTAGACTACAGCGTCAGTATCGTCGCTGTAGTCTCG
45: TGCATATGACACTCACGATGAGCTCAGTCAGACGTGCATGAGTGCGCAGATGAGCTGCAT
46: GCGACTCGTCGATAGCTCTCAGACTACAGCGCGCAGTCGAGTCTGCATAGAGTCTCACGA
47: TGCACGATATGATGTCATCATCGTGACAGTCGTCTGTCGCACGATATCTGCATGTCGCGC
48: TGCAGTATACGTGTCATCTCGCTGAGTCACAGCATGACTGTAGTAGATACGACTATACGA
49: TCGAGTACTGACTGTCAGATACATGCTATCTGACTGTGTGACTGTACACATGACGTATCA
50: TAGATACATGTGACACGAGTGTACACAGTAGCTGATGCAGACATGACAGAGCATCGCATG
51: ACGACGCTCTGCACAGCTATACGTGAGTGCGCATGCGACACTACATCGATCGCATATCTC
52: ACACGTCTCTGCGCTCTACGTAGCTCACGAGAGCTCATGCACTGCGTACTCTCACTGACG
53: TAGCATGTCATGATGCTGATGTGTGTGCAGTGCGTGTATAGCGATATGCGATCGACACGA
54: TCGTCACTCGCGTCTCATCTATCATGTCGTGTATGCTAGATGCAGAGATCTCACGTGACG
55: TGCATATGCTAGCATCATCACTAGATATGTCTATGCAGAGACTGTATGACAGTCGTCGTC
56: AGATACGCACAGTCTATCGTCGTAGTCTGACTCATCGCTGCATACGCTCACTCAGCAGCT
57: ACACGCATATCGAGAGCACGAGCACAGACGTGACGTGTCTCATGCAGCTATATATGCATG
58: CATCAGCGAGCGCAGATCTGACGACGATACATATGTCGCATCAGATCGAGCTCGCGATCG
59: CTCGCTCGCATCTCATCTCGTGAGTAGACGCTAGCTGCGCTGATGCAGAGTACACATATA
60: TGCGCAGACGTGATGCTAGAGTCGTAGCGATCTATGTGTGTCGTCAGTCTGAGTCTGTCT
61: CGCATAGATCGATCGTACTACTGTCAGCTCGAGATGTATAGACGTGTCACTCTACATACT
62: CTCGCGTGCGCTGCATCATGCTGAGTACATGAGCACACGCAGCTATGCACAGCTCTCATA
63: CAGCAGCGACTGTATGTGTAGAGCAGATGTCTGATCATCGTCATGACGTCTCATAGTCAC
64: GATACGATCAGTCGAGCTGCAGAGCTAGTCGACGCGTGTGCATATAGTCACTCGAGATCT
65: GTACGTGTGCGTGCGCAGCGTGTGCTCTATACACGTCACATCTCACATGTGATGTAGCA
66: TGATGACATGATCTCAGTAGTGCATCGATATACGCTAGCTCGAGTGACTCACATAGATGC
67: ATGCAGACGCGTAGTAGTCAGTAGCATGTATATGTATACAGCGCATATCAGCATCATCGT
68: CGTGTGAGTAGATCAGATACTAGTACTGAGATATAGCTGTGCTGCTCATACATGCGTATG
69: CGACACGCACTCACATGCTACTCTCGCTCTGTCAGCGCACTCATGCTCTGTGTCTCGCTC
70: ACGCATGTCATGATGCACGTCTGATACACTACACTGCGCACTCTAGACGCGATATCACTC
71: TAGTCTCTATGCAGACGCTGATACTAGTCTAGCGTCTGCATACGACAGAGACTCGTCGCG
72: ATCGTCGTGTACTACTGCATAGACTGTATCGTACACGAGATGTAGATAGTATACGCATGA
73: GATCAGTAGATACAGTGCGTACTCACTATGACACTGCATACTGCAGCTCGACTAGACTGC
74: AGACGATATCACACTCATCACGATCGTACGCAGTATCACTCTACTGTCATATGAGACATA
75: CTGCACTAGAGACAGAGCGATCACATAGATCGTCACGACAGCATGAGCAGCGATACGTAC
76: GTACGTACGTACGTACGCGTCTCTA