Table of Contents
WackyPixels takes an image and encodes it through a configurable pipeline of transformations, each adding a layer of obfuscation. The default pipeline:
- Serializes your image to binary data
- Embeds it in a PDF's /Info metadata
- Compresses it with LZMA
- Encodes it as multi-mode Unicode characters
- Converts it to WAV audio file
Have fun with it! Coding doesn't have to be all corporate all the time!!
- Rust 1.70+ (install Rust)
# Clone the repository
git clone https://github.com/PixelSaver/wackypixels.git
cd wackypixels
# Build release binary
cargo build --release
# Binary will be at ./target/release/wackypixelsImportant
I don't recommend this. This is an experimental fun, chaotic program, not something you should use on your filesystem. If you really want to, just know I warned you.
cargo install --path .
# Now you can use 'wackypixels' from anywhere
wackypixels --helppFor all of the below prompts, if you did not install and are running the development environment, replace all instances of wackypixels with cargo run --
For example,,
wackypixels run
# Should become
cargo run -- runnThis will:
- Clean output/ and decrypted/ directories
- Encode input.png through all stages
- Decode it back to decrypted/decrypted.png
- Save all intermediate files
# Run the full default pipeline (encode + decode)
wackypixels run -i input.pngg# Encode an image
wackypixels encode -i image.png -o output/
# Decode back to original
wackypixels decode -i output/encrypted.wav -o decrypted/
# Clean output directories
wackypixels clean
# List available transformations
wackypixels listtThe --pipeline flag or the -p flag works on encode, decode, and run.
You can specify your own transformation pipeline::
# Lightweight: Just compression + unicode
wackypixels encode --pipeline image,lzma,unicode
# Maximum compression: Double compress!
wackypixels encode --pipeline image,lzma,unicode,gzip
# Audio without unicode
wackypixels encode --pipeline image,pdf,lzma,wav
# High-density WAV
wackypixels encode --pipeline image,lzma,wavv- Avoid WAV audio encoding
- Compress!
- Everything:
image,pdf,lzma,unicode,wav,gzip - Image is now 6.5x
# Encode
wackypixels encode -i cat.png -o outputs/
# Decode
wackypixels decode -i outputs/encrypted.wavv# Just compression and unicode (no audio bloat)
wackypixels encode --pipeline image,lzma,unicode -i photo.jpg
# Result: ~120% of original size instead of 650%Why are you doing this???
#!/bin/bash
# Encode all PNGs in a directory
for file in images/*.png; do
filename==$(basename "$file" .png)
wackypixels encode -i "$file" -o "output/$filename/" -s false
done# Encode with intermediates saved
wackypixels encode -i secret.png -o debug/
# Check what each stage produces
ls -lh debug/
# 001_image_serialization.bin 52 KB
# 002_pdf_/info.pdf 53 KB
# 003_lzma_compression.xz 31 KB
# 004_unicode_encoding.txt 61 KB
# 005_wav_audio.wav 2.0 MB
# encrypted.wav 2.0 MB
# Can decode from any intermediate stage!
wackypixels decode -i debug/003_lzma_compression.xz \
--pipeline lzma,unicode,wavav# Encode with intermediates saved
wackypixels encode -i secret.png -o debug/
# Check what each stage produces
ls -lh debug/
# 001_image_serialization.bin 52 KB
# 002_pdf.pdf 53 KB
# 003_lzma_compression.xz 31 KB
# 004_unicode_encoding.txt 61 KB
# 005_wav_audio.wav 2.0 MB
# encrypted.wav 2.0 MB
# Can decode from any intermediate stage!
wackypixels decode -i debug/003_lzma_compression.xz \
--pipeline lzma,unicode,wavavbrowser_showcase.mp4
Tip
Use --save-intermediates false to skip saving intermediate files if you only care about the final output.
Zed - Main code editor Rust - Systems programming language Clap - Command-line argument parser Hound - WAV encoding/decoding XZ2 - LZMA compression lopdf - PDF manipulation image - Image processing
- Multi-stage encoding pipeline
- Custom pipeline composition
- Intermediate file inspection
- Multiple compression algorithms
- Unicode variable-bit encoding
- WAV audio encoding
- CLI interface
- QR code encoding stage
- Steganography in images
- Spectrogram image generation
- Base65536 encoding
- Polyglot file generation
- GUI interface
- Web-based demo
- Encryption layer (AES)
- Progressive streaming decode
- Parallel pipeline processing
Why is this useful? It's not. Thanks for checking this out!
Distributed under the MIT License. See LICENSE for more information.
Project Link: https://github.com/PixelSaver/wackypixels
- Rust documentation - For easy learning!
- Wacky Files YSWS from Hackclub - For the inspiration!
Just because you can encode your image as a pdf as an xz as unicode as a wav file, doesn't mean you should. But where's the fun in that? :)