Encode any file into a video. Decode the video back into the original file, byte for byte.
Celio reads a file as raw binary data, renders it as a sequence of black-and-white pixel frames, and assembles those frames into a video. The decoder reverses the process — extracting frames, sampling pixels, and reconstructing the original bytes exactly. Error correction is built into the encoding so the data survives video compression.
Status: Work in progress.
A video is just a sequence of images. An image is just a grid of pixels. And a file is just a sequence of bits. Celio collapses these three facts into one pipeline: any file becomes a visual bitstream, and that bitstream can be played, stored, and reversed.
file → bytes → bits → pixels → frames → video
video → frames → pixels → bits → bytes → file
- Encode any file type such as text, images, binaries and archives with no format-specific handling
- Perfect round-trip reconstruction, verified byte-for-byte against the original
- Resilience to standard video compression, not just lossless formats
- A clean command-line interface:
celio encode <file> <video>andcelio decode <video> <file> - Written in C with minimal dependencies
- Self-describing output. The video itself carries everything the decoder needs like the file size, layout, encoding parameters.
- Separation of concerns. Encoding, error correction, pixel rendering, and video I/O are independent modules that can be tested in isolation.
- Built in stages. Each stage of the pipeline is verified end-to-end before the next is added. Raw bit rendering first, then error correction, then video compression resilience.
- C — core encoding and decoding logic
- libpng — lossless frame output
- ffmpeg — video assembly and frame extraction (via subprocess pipe)
- Hamming codes — error correction for bit-level resilience