A cassette state of mind
Album art, cassette-inspired menus, moving tape reels, and a playback counter. A little analog character for your digital collection.
Open firmware / Full-size SNOWSKY ECHO
A fresh spin on your Snowsky ECHO. Cassette soul, a queue you control, and mixtapes worth keeping.
Free & open source. Built for listening, offline.
01 / The good stuff
Your own music, with more ways to make it yours.
Album art, cassette-inspired menus, moving tape reels, and a playback counter. A little analog character for your digital collection.
Save, name, load, and edit up to 32 mixes. Keep your song order and duplicates, even after a library rescan.
Reorder, remove, add, or play a song next. Edit album and shuffle queues, then pick up your saved session after a restart.
Choose eight tap-and-hold assignments across Volume ±, Play, and Menu. Playback shortcuts work with the screen off.
Browse albums and Cover Flow, use M3U/M3U8 playlists, and split album images with CUE sheets. Build artwork and the library on the player.
Album favorites, audiobook and podcast bookmarks, and saved settings. Use a FAT32 or exFAT microSD card, or internal storage without a card.
02 / Press play on something new
Build from sourceBuild Gnarlyr from the SnowskyEcho source with the project tools.
The release build produces ECHOV455.IMG. Calculate its SHA-256, then follow the install steps below.
# From the SnowskyEcho project root, on macOS
python3 tools/firmware.py setup
python3 tools/firmware.py build --preset release
shasum -a 256 /Volumes/Scratch/SnowskyEcho/\
build/custom-firmware/release/ECHOV455.IMG
OUTPUT ↳ ECHOV455.IMG
/Volumes/Scratch/SnowskyEcho/build/
custom-firmware/release/
Requires the source checkout, mounted Scratch volume, Python 3.14, CMake, Clang/clang-format, SDL2, FFmpeg, an Arm cross-compiler, and the firmware’s Python dependencies. See build setup for the project’s environment details.
03 / Flip the tape
Install over USB in three steps.
Before you install: back up your files, charge the battery, turn the volume down, and keep the stock recovery image handy.
Build ECHOV455.IMG above. Record its SHA-256, then verify the copied file has the same hash.
Connect the ECHO over USB. Copy the image to the top level of its internal drive, outside any folder. Remove other ECHOVnnn.IMG and ECHOECHO.IMG update files first.
Safely eject both drives, then unplug for the first install from stock. Leave the player powered while it updates. Let the first library and artwork scan finish before listening.
Already running custom firmware? Eject both drives and wait for “Update installed” before unplugging and restarting with Power.
Play FLAC, MP3, WAV, AAC-LC, and ALAC in .m4a files. Browse your collection with album art, playlists, and CUE tracks.
Use embedded album art or a JPEG/PNG named cover, folder, front, or albumart. M3U/M3U8 playlists work alongside saved mixtapes. CUE sheets split single-file FLAC, WAV, and MP3 album images into individual tracks. Accented Latin and Cyrillic titles are supported.
Start with the SnowskyEcho checkout and docs/building-firmware.md. Install Python 3.14 and the dependencies in firmware/tools/requirements.txt into a Scratch-backed virtual environment. Set ECHO_VENV to that environment and ECHO_ARM_BIN to your Arm GNU toolchain’s bin directory.
Install CMake, Clang/clang-format, SDL2, and FFmpeg, mount Scratch, then run the setup and release commands above. Find the finished image under /Volumes/Scratch/SnowskyEcho/build/custom-firmware/release/.
Keep the official full-size ECHO ECHOV200.IMG, a data USB cable, and the project’s recovery guide, firmware/docs/device-recovery.md.
To return to stock, copy the official image to internal storage. Keep it as the only update file at the drive root. Eject both drives, wait for the updater to finish, then unplug and restart.
For maskrom recovery, follow the guide using its patched rkdeveloptool. The guide covers the full-size ECHO’s 2207:262d USB identity, connection checks, and stock restore.
Stay offline. Get a little gnarly.
Made for the music you already love.