Digital cassette tapes disguised as PNG images
Rewind.png is an experimental media format that embeds lossless audio (FLAC/MP3/OGG/WAV) inside PNG images without corrupting the visual data. Think of it as a modern cassette tape; The PNG is the box art, and the embedded audio is the music inside.
Try it: rewind tui demo/Cassette.png
The ritual of physical media is dead. Music streaming is convenient, but it's also ephemeralโtracks disappear, playlists break, and there's no object to treasure. Rewind.png brings back:
- Tangible ownership: One file = one album + its cover art
- Intentional curation: Like burning a mixtape, each cassette is deliberate
- Fragility by design: Re-compress the image? The audio breaks. This forces careful handling, just like vinyl records.
Use cases:
- Gift custom mixtapes with personalized cover art
- Archive music collections with embedded album art
- Share music in a nostalgic, tactile format
| PNG Header Image Data (IDHR, IDAT Chunks) IEND Chunk |
|---|
| Table of Contents (TOC) - Track count - Track names & sizes |
| Audio Track 1 (FLAC/MP3/OGG/WAV) Audio Track 2 ... |
| CRC32 Checksum (Integrity Seal) |
To image viewers: It's just a normal PNG.
To Rewind: It's a playable cassette with embedded audio.
- Whitelist-only formats: Only FLAC, MP3, OGG, and WAV are allowed
- CRC32 integrity check: If the file is modified (e.g., re-encoded by social media), playback is blocked with: "This cassette has been damaged."
- Non-destructive embedding: The PNG image remains fully viewable
- Rust 1.70+ (Install Rust)
- Audio files (FLAC/MP3/OGG/WAV)
- PNG image (for cassette cover art)
git clone https://github.com/Hyphonical/Rewind.png.git
cd Rewind.png
cargo build --releaseBinary will be in target/release/rewind
- OS: Windows 10+, macOS 10.15+, or Linux (any modern distro)
- Terminal: Unicode support recommended for TUI (Windows Terminal, iTerm2, etc.)
- Audio: Working audio output device
Inject audio files into a PNG image:
rewind record cover.png track1.flac track2.flac track3.flac -o mixtape.pngOutput: mixtape.png (viewable as image, playable as audio)
View embedded tracks and verify integrity:
rewind inspect mixtape.pngExample output:
[00:00:00] โ Checksum matches. The file is intact.
[00:00:00] ๐ TOC: 6 audio file(s)
[00:00:00] ๐ [1] Track_1.flac (10000000 bytes) | ๐ต Artist 1 - Track 1 [1:23]
[00:00:00] ๐ [2] Track_2.flac (10000000 bytes) | ๐ต Artist 2 - Track 2 [1:23]
...
Play a random track (for testing):
rewind play mixtape.pngOutput:
[00:00:00] โ โถ Now Playing: Artist 1 - Track 1 [1:23]
[00:00:00] ๐ Press Ctrl+C to stop.
Open the full-featured skeuomorphic cassette player:
rewind tui mixtape.pngFeatures:
- ๐จ Vintage cassette design with animated progress bar and spinning reels
- ๐ฑ๏ธ Mouse support - click buttons directly or select tracks
- ๐ Volume control with visual slider (0-100%)
- ๐ Dynamic playlist that auto-sizes based on track count
- โฏ๏ธ Full playback controls with visual feedback
Keyboard Controls:
| Key | Action |
|---|---|
| โ/โ or j/k | Navigate tracks |
| Enter | Play selected track |
| Space | Pause/Resume |
| โ/โ or p/n | Previous/Next track |
| +/- | Volume up/down |
| S | Stop playback |
| Q or Esc | Quit |
Mouse Controls:
- Click on any button (โฎ โถ โธ โ โญ) to control playback
- Click on a track in the playlist to play it
- Click volume buttons to adjust audio level
Note: Your terminal must support Unicode box-drawing characters and mouse input for the best experience.
- Core polyglot PNG/audio embedding
- Record audio tracks into PNG images
- Inspect cassette metadata & verify integrity
- Basic CLI playback
- Structured CLI with
clap-
rewind record <image> <audio...> -o <output> -
rewind inspect <cassette> -
rewind play <cassette> [--track N]
-
- Sequential playback (auto-advance tracks)
- Improved error handling and user feedback
- Terminal UI with
ratatui - Interactive track selection
- Progress bar + metadata display
- Keyboard navigation
- Improved audio handling with
rodio - Track metadata extraction (artist, title, duration)
- CRC32 integrity verification
- Pause/resume functionality
- Complete UI redesign with vintage cassette aesthetics
- Mouse support (clickable buttons)
- Volume control with visual slider
- Dynamic playlist sizing
- Auto-play next track
- Pre-built binaries for Windows, macOS, Linux
- Installer/package manager support
- Configuration file support (default volume, theme)
- Error recovery (handle corrupted tracks gracefully)
- Native desktop app with Tauri
- Drag-and-drop cassette loading
- Visual cover art display
- Cassette library (recently played)
- Web-based player (WASM)
- Multi-cassette mixtapes
This project is licensed under the MIT License. See LICENSE for details.
Demo Cassette Image (demo/Cassette.png):
- Cover art ยฉ 2025 Hyphonical. Licensed under Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International (CC BY-NC-ND 4.0).
- You may: Share and redistribute the image with proper attribution
- You may not: Modify, remix, or create derivative works, or use it for commercial purposes.
- The Sonyยฎ trademark shown on the demo cassette is used for aesthetic purposes only. Sony is a registered trademark of Sony Corporation. This project is not affiliated with, endorsed by, or sponsored by Sony Corporation.
Demo Audio Tracks:
All tracks by Kevin MacLeod (incompetech.com):
- "Aquarium"
- "Sugar Plum Breakdown"
- "Hall of the Mountain King"
Licensed under Creative Commons: By Attribution 4.0 License
A great part of this project was created using various AI models, including Claude Sonnet & Opus, Gemini 3 Pro & Flash, and Grok Code Fast 1. Without these tools I would not have been able to create Rewind.png in this timeframe.
Made with ๐
