Skip to content

Releases: b0hemia/diskos

diskOS installer v1.2.1

Choose a tag to compare

@b0hemia b0hemia released this 14 Oct 07:04

Released 2026-10-14.

Adds Ogg Opus support and Windows installation, updates the installer experience and startup animation, and fixes text, playback, Wi-Fi, screen wake and app-update handling.

1.2.0 users can install the signed app update from Settings > System > Update diskOS if updates are allowed. Fresh installs and older versions use the installer. App updates do not replace the boot install script. Fixes marked "Requires a full flash" need the complete 1.2.1 installer.

Read the installation guide before flashing. Back up your music, keep the saved stock image on separate storage, and keep the Disc connected and computer awake until verification finishes. Recovery is not guaranteed.

Added

  • Public website with screenshots, a feature tour and installation links.
  • Ogg Opus support for .opus, .oga and .ogg files: the scanner reads their tags and available lengths, and playback uses the Disc's stock player. When the player's title is empty or matches the filename, diskOS reads the file's TITLE tag and uses it when the read succeeds. If tags are absent or unreadable, the player's title is retained. Lengths the scanner cannot read remain unknown. The resolved title also reaches the current Up Next row, Song Info, lyrics and online artwork searches, and Last.fm.
  • Playback progress around Home's now-playing border in the halo theme.
  • Settings > System > Old tags: Auto / Western / Cyrillic for legacy music tags and CUE-sheet text. Auto is the default and guesses CP1251 Cyrillic; Western keeps Latin-1 decoding, and Cyrillic selects CP1251. Use Rescan Library after changing it. Valid UTF-8 and UTF-16 tags are unchanged.
  • Windows 10/11 x64 installer support. Extract the complete diskos-installer-windows-x86_64.zip and open diskos-installer.exe. Keep _internal, RECOVERY.txt and the other files together. The program is unsigned; Windows SmartScreen may warn on first run.
  • A Ready checklist before image preparation, with flash-mode detection, USB driver or permission hints, the firmware choice and installer tools. It shows items needing attention and a Refresh action. When no Disc is found, it explains how to power off, hold Volume Down and connect USB; the screen stays black. Checklist warnings do not block the install. Firmware and actual USB access are checked before flashing.
  • A confirmation screen listing the firmware base, duration and update choice. Begin flash stays disabled until the acknowledgement is ticked.

Changed

  • The Default theme is now called halo.
  • The installer on Windows, macOS and Linux uses the website's diskOS wordmark, Archivo and Michroma display lettering, a disc illustration, quieter sections and a rose primary button. Dynamic text uses the system font; no fonts are installed on the computer. Dev is under Advanced.
  • The installer has dedicated preparation, flashing and result views. Flashing shows elapsed time, progress and a reminder to keep the Disc connected and computer awake. Details opens the log. Success explains the next step; errors show the code and recovery action. An unknown flash result shows the 25-minute wait and offers no Back action.
  • The installer layout is compact for 1366x768 screens. Taller content scrolls inside the window, and result-screen Back and Close buttons remain outside the scrolling content.
  • Restore stock firmware uses the saved stock image and offers a firmware ZIP picker only when no saved image is found. For a damaged saved backup, use restore-stock --firmware <zip> to rebuild it from matching stock firmware.
  • Remove installer data clearly describes host cleanup. It removes saved state and owned GUI logs, while keeping the app and Windows USB driver binding. It does not remove diskOS from the Disc.
  • A new startup animation: a light splits into two spectra across the disc, the diskOS wordmark appears in the hub, and the hub opens to reveal the interface. It lasts about 2.4 seconds; the glow follows the theme's accent. The wordmark uses Archivo, matching the website and installer.
  • Settings > Display > Disc Colour is removed. It controlled only the previous startup drawing; the new animation uses the theme's accent.
  • Theme details extend through lists, empty states, missing artwork and screensaver song displays: hi-fi's amber row lights, bauhaus's geometric bullets, blueprint's figure numbers and drafting marks, stone's pebble controls, and zine's tape and pressed-row underlines.
  • Something has a blinking clock colon, dot arrows and a dotted Now Playing progress ring. Terminal has a blinking header cursor, aligned playlist durations and a highlighted Now Playing label in Up Next. Hi-fi uses bezel ticks for progress; stone uses a fading progress arc.
  • Bauhaus Now Playing fills the left half with artwork, uses sharper covers when available and gives queue position its own line.
  • Screensavers show song text while playing and hide it when paused. The Analog dial is smaller and higher. Vinyl hides song labels while showing a cover and keeps fallback text when no cover is available.
  • Unchanged song and clock text no longer causes repeated text and layout work. Now Playing title scrolling stops off screen, and Vinyl rotation stops when there is no cover. With Covers only selected, idle cover preparation waits for work instead of waking every second.
  • Screen-off drawing is paused and repainted before the backlight returns. Cover Flow and the Library scroll-letter timer stop checking when idle. Library row loading pauses on other screens and resumes on return. Sliding screens avoid repainting areas already covered by the moving panel.
  • A-Z jumps wait for their target rows without building the remaining list at once; manual scrolling cancels a pending jump. Large playlists build rows incrementally. Folders are read in the background.
  • Cover Flow prepares missing covers in the background, uses placeholders until they are ready and releases its cover memory after leaving. Library buffers are allocated as needed rather than all at startup. Album track-order reads are batched when possible, and artist queue membership checks use less work.
  • Rescans skip embedded artwork when reading tags and look up existing files more efficiently. Cancelling or failing a rescan no longer forces an otherwise healthy library to reload.
  • Unchanged settings and playlist records avoid unnecessary writes. Playlist counts are read together, and Last.fm avoids repeatedly rereading its queue just to count pending scrobbles.
  • Wi-Fi checks back off while a connection remains down and return to faster checks after activity, wake, network recovery or a Wi-Fi setting change. Weather skips background downloads while offline, fetches after reconnecting and backs off repeated connected failures.
  • Weather requests now use HTTPS.

Fixed

  • Keep or Go back is not asked again after changing theme, appearance, text size or language. A failed save leaves the question open for retry.
  • Later app updates can complete their trial after an earlier update was kept, instead of rolling back because the running-build record outgrew its buffer.
  • After confirmed playback, failed update-health saves are retried for a few minutes rather than abandoned after one attempt.
  • A build previously rolled back on this Disc is refused before its bundle downloads, with an explanation.
  • The boot install script no longer performs installation during shutdown. Requires a full flash.
  • The 1.2.1 system image refuses saved app updates below its update limit. An app update does not change that image limit. Requires a full flash.
  • Keeping an update waits until the previous saved version has actually been moved aside. If that move fails, the update remains on trial instead of being moved inside the previous version's directory. Requires a full flash.
  • If a trial start cannot be recorded, that boot uses the previous accepted or flashed app and leaves the trial for a later start. Requires a full flash.
  • A proven healthy update remains on trial if saving its approval fails, with promotion retried on a later start. Requires a full flash.
  • On startup, an install log larger than 64 KB is trimmed to its newest 300 lines. Requires a full flash.
  • The boot installer removes its spare rejected-app copy after verifying the installed app, freeing space for updates. Requires a full flash.
  • Returning from Now Playing to top-level Songs, Albums, Artists or Genres no longer rebuilds the list.
  • Installer console output uses readable replacements for characters the terminal cannot display.
  • Missing or unloadable firmware-decryption dependencies stop the installer before firmware work with E105 and corrective instructions.
  • Unknown flash results explain the required wait: leave the Disc powered and connected, and the computer awake, for at least 25 minutes after the error. Do not retry or disconnect during that wait.
  • USB flashing handles partial transfers and bounds stalled communication. Reconnection requires exactly one device at the same USB location.
  • Chinese, Japanese and Korean names and titles use the stock font fallback across themes and text sizes. Latin-1 accented letters retain the zine and something title faces; zine also retains its face for Cyrillic U+0400-U+045F. Theme letter case handles Latin-1, Latin Extended-A and those Cyrillic pairs.
  • V2.57 Wi-Fi skips the extra startup hold when Bluetooth is saved off. Other startup cases can still take about a minute.
  • Headphone output can recover after a UI restart or boot that left the player routed to Bluetooth without a connected audio device (issue #9).
  • On V2.57, one power-button press wakes diskOS Screen Off. Button wake restores the user's diskOS brightness.
  • Now Playing accepts song details containing double quotes rather than retaining the previous song.
  • diskOS briefly checks for a missed track advance near a track's...
Read more

diskOS installer v1.2.0

Choose a tag to compare

@b0hemia b0hemia released this 01 Oct 22:12

Released 2026-10-02.

What is new

diskOS 1.2.0 adds support for a Disc running unmodified official V2.57 firmware, alongside
V2.09, V2.28, and V2.40. The installer checks the Disc's existing kernel and recovery before
writing the new image.

The interface has eight themes, dark and light appearance, Outdoor Mode, three list text sizes,
and an interface language choice with English fallback. The startup animation can show a chosen
Disc body colour. Library browsing adds Artist and Genre album views, an All Songs choice, and an
Up Next list that shows the current queue and lets you jump to an upcoming song. Playlists retain
their order, appear in the stock playlist registry, and can be edited or exported. M3U import
searches card folders within limits and keeps a differing same-name playlist.

The library indexes more formats, including AAC, OGG, APE, AIFF, WMA, DSF, DFF, DTS, external CUE
sheets, and SACD ISO track rows. Song Info shows available audio and file details. Display and
playback settings add track numbers, Album Artist grouping, Play Through Folders on V2.28 and
later, optional online art and lyrics, and timed lyrics. Local and embedded lyrics still work when
online lyrics are off. The System settings add manual and automatic time, Device Info,
battery/board temperature, and a reset that keeps music, network, Last.fm, EQ, and audio settings.

V2.57 also has screen rotation, volume-key actions, idle power-off, charging limit, a choice to
pause or request shutdown when the Sleep Timer ends, and Bluetooth Codec selection. On older
firmware, Bluetooth Codec says "Not on this firmware". The V2.57 Custom EQ editor is view-only;
Gain remains available.

Album artwork is now decoded by a new helper, diskos-artdec, in place of the stock ffmpeg
command, which V2.57 ships without image decoders. It runs as a separate short-lived process for
embedded and same-folder covers. Cached covers are rebuilt once after the update.

Rescans show progress and a Stop action; cancelling keeps the
previous library. This release also fixes clock-save delays, artwork cache misses from changing
card inodes, a fixed playlist-export temporary name, and playback screens opening after a
refused play request. The installer now reports a USB-permission problem when it can see a
mask-ROM Disc but cannot open it.

A back swipe that starts on a control no longer also taps that control, which could go back two
screens or change a setting. Long one-button messages no longer sit behind the OK button.
With Weather on Home off, diskOS no longer makes a weather request at startup.

There is now a macOS installer package for Apple Silicon Macs with the flash tools already
built, so you no longer build them yourself. You still need Python 3. Intel Macs can still build the tools from source with
vendor/setup-macos.sh. On Linux, setup and the tool build scripts now work on Arch, CachyOS,
and Fedora as well as Debian and Ubuntu, and doctor names your distribution.

Install or upgrade

Use the complete 1.2.0 installer and matching flash tools with your own unmodified official
FiiO firmware archive. A full flash is required, including when upgrading from 1.1.3; replacing
only the UI does not install the new boot components. Back up the microSD card and keep the saved
stock image on separate storage. The installer offers Public and Dev variants. Dev adds an
always-on passwordless USB-serial root shell and is intended for a dedicated development Disc.

The 1.2.0 release image includes the diskOS release update key by default. The GUI's "Allow diskOS
updates over Wi-Fi" checkbox starts checked; untick it when flashing to omit the key. For a CLI
install, --no-ota excludes any update key; --ota-key PATH includes your own ECDSA P-256 public
key instead. With no key, the Disc says "Not supported on this install" for Allow diskOS Updates.

1.2.0 itself requires a full flash because that installs the update feature. The first update
over Wi-Fi will be a later signed release. Settings > System > Update diskOS checks for a release
and, when a signed app bundle is available, downloads and stages it. It replaces only the diskOS
app, not stock firmware or the whole flashed image. After restarting into a trial update, you
can Keep it or Go back; a broken update rolls back automatically. Settings > System > Allow
diskOS Updates turns downloads off. Turning it off with an update pending offers Discard or
Cancel. The update check remains available while downloads are off.

To restore stock, use the installer's saved-image restore. The one-time stock UI boot and Default
UI setting remain available while diskOS is installed. Reinstalling an older diskOS version from
before the playlist ID fix can remove stock playlist members when a new playlist is created;
keep a copy of important playlists before downgrading.

Known limitations

  • Library indexing does not mean every newly listed format will play on the Disc. CUE and SACD
    track playlist round trips may vary by file.
  • Up Next reads and jumps within the current queue; it cannot edit the queue. Browse Files uses
    the all-songs queue, and a file must be indexed before it can play there.
  • Playlist and book playback may fail on V2.09. The V2.57 Custom EQ editor is view-only.
  • Bluetooth codec behavior can depend on the connected headphones. The new shutdown and charging
    choices may vary with firmware and device state.
  • Update from SD Card is informational. It identifies a file named like a stock update and
    explains the stock route, but diskOS does not start that update.
  • After a restart, Wi-Fi can take up to about a minute to connect; if it shows no IP, reconnect
    in Settings > Wi-Fi. A fix is planned for 1.2.1.
  • On the first boot after installing, a "Player didn't respond" message may appear once while the
    player is still starting. It is harmless; playback works normally. A fix is planned for 1.2.1.
  • A library scan can leave hardware buttons unresponsive until it finishes. Restart can refuse
    when card work or flushing does not finish.

Acknowledgements

  • IniGisah contributed Arch Linux, CachyOS, and Fedora support for
    setup, the tool build scripts, and doctor
    (PR #11).

diskOS installer v1.1.3

Choose a tag to compare

@b0hemia b0hemia released this 24 Sep 11:22

diskOS v1.1.3 is a safety release. It protects your microSD card against a deletion flaw in the stock
FiiO player, and reworks how diskOS shares the card with USB Storage.

Every diskOS user should update. Back up your card first. Updating needs the complete installer and
a new flash: copying only the UI binary does not install the protection.

What was wrong

The stock FiiO player, which diskOS runs alongside, tries to unmount the card and then deletes everything
at the card's mount point, without checking that the unmount worked. If the card is still mounted, for
example because something is reading it, this can delete its contents. This flaw is in the stock
player itself (confirmed in the V2.09, V2.28, and V2.40 binaries). It has not been proven that this is
what emptied the two cards reported to us, but it is a real path to data loss and v1.1.3 blocks it.

What v1.1.3 changes

  • Delete guard: the flashed image refuses rm on the card or anything on it, including when the
    stock player itself asks for it. It blocks this specific path, not every possible way to lose data.
  • Safer USB Storage: diskOS finishes its own card reads and writes first, confirms the card was
    really handed over and really came back, and refuses the switch during a library scan or whenever it
    cannot confirm the card is safe.
  • Card checks first: scans, artwork, browsing, and playback wait until the card is confirmed safe.
  • Boot choice made earlier: diskOS or stock is decided once per boot, before diskOS starts. Anything
    unexpected boots stock.
  • Bluetooth: status checks are time-limited and cleaned up without waiting, and shutdown no longer
    waits on the Bluetooth service.
  • Also: extra punctuation and a few more CJK characters, clearer scan messages, shared transport
    controls with 15 s / 30 s audiobook skips in Quick Settings, a hold-Volume-Up gesture to close an
    external app, and Settings and search layout fixes. Restart is temporarily removed from Settings.

See CHANGELOG.md for the complete list.

Supported firmware

Stock firmware v1.1.3
V2.09, V2.28, V2.40 Supported
V2.57 Not supported (the installer refuses it)

The installer only accepts the unmodified official firmware.

Install or update

  1. Back up your microSD card, and keep your saved stock image on separate storage.
  2. Extract the complete v1.1.3 installer bundle.
  3. Run ./install.sh, then ./diskos-installer doctor.
  4. Run ./diskos-installer gui, choose Install diskOS, and select your official FiiO firmware ZIP.
  5. Power off the Disc, hold Volume Down, and connect USB.
  6. Keep it connected until the write and verification finish (about 15 minutes), then power it on.

Do not run the installer as root. Generated images contain FiiO files and must not be redistributed.

Known issues

  • The hardware buttons can stop responding while a library scan runs (touch still works).
  • To boot the other UI once, hold Volume Up from power-on until it appears.
  • Restart is temporarily missing from Settings.
  • Debug Mode offers SSH over Wi-Fi only on public builds.

The guard closes one specific way of losing data. Keep backups.

diskOS installer v1.1.2

Choose a tag to compare

@b0hemia b0hemia released this 20 Sep 12:31

diskOS installer v1.1.2

A maintenance release that fixes installing from a source checkout, and (from this release on) ships
the native flash tools as a downloadable asset again so you do not have to build them.

Fixed

  • Install now works from a plain source checkout. The vendored flash tools
    (usbboot/mksquashfs/unsquashfs) are not committed to the repository, so a git clone or the
    GitHub "Source code" archive previously failed with bundled tool 'unsquashfs' not found, even when
    squashfs-tools was installed. The installer now uses a system mksquashfs/unsquashfs from your
    PATH when the bundled copies are absent. usbboot and the device files stay bundle-only.
  • Clearer failures. A new squashfs LZO capability check runs before the build and in doctor, so a
    squashfs tool without LZO support fails with an actionable message instead of failing partway through
    the build. doctor now labels each tool as bundled or system and flags broken entries, and
    tool-not-found guidance points at the correct build step instead of advising a re-download.

How to install

Recommended: download diskos-installer-linux-x86_64.tar.gz below (source plus the native flash
tools, nothing to build), then:

tar -xzf diskos-installer-linux-x86_64.tar.gz
cd diskos-installer
./install.sh
./diskos-installer doctor

Alternatively, from a git clone: install squashfs-tools (Debian/Ubuntu:
sudo apt install squashfs-tools) and build usbboot once with bash build/build-usbboot-static.sh.
On WSL, run from the Linux filesystem (for example ~/diskos), not a Windows-mounted /mnt/c path.

Verify the download against SHA256SUMS. Needs Python 3.8+. The GUI additionally needs Tk
(apt install python3-tk); device detection needs libusb-1.0 (apt install libusb-1.0-0).

Full changelog: v1.1.1...v1.1.2

v1.1.1 - macOS build fix + audiobook chapters

Choose a tag to compare

@b0hemia b0hemia released this 20 Sep 07:13

diskOS v1.1.1

Image builds now work on the default macOS filesystem. This fixes the E230
unsquashfs ... already exists failure caused by stock firmware files whose names differ only
in case.

v1.1.1 builds on v1.1.0, which introduced
V2.40 support and the UI refresh: album cover flow, audiobooks with chapters and saved progress, folder browsing,
multilingual library text, and safer USER EQ preset selection.

What's fixed

On a case-insensitive macOS filesystem, the installer now automatically creates a case-sensitive
APFS scratch image using hdiutil, mounts it, and verifies its case sensitivity before extracting
the root filesystem. The rebuilt image's validation extraction uses the same volume.

The installer handles detaching the volume and removing the scratch image afterward, with warnings
if cleanup cannot finish. No manual case-sensitive volume setup or workspace relocation is needed
for normal macOS builds.

The scratch-volume mechanism is a no-op on Linux with a case-sensitive filesystem and on
case-sensitive macOS volumes.

Tested

  • Linux x86-64: builds and flashes end to end on hardware with V2.09, V2.28, and V2.40.
  • macOS: image builds now succeed on the default case-insensitive filesystem. Real-Mac
    validation confirmed that back_home.png and BACK_HOME.png coexist after extraction.
    Device flashing from macOS remains unverified end to end: no flash with a device attached
    to a Mac has been completed.

Local playback is the well-tested listening path. Weather and Last.fm remain experimental;
Last.fm has not completed live end-to-end verification. USB DAC, Bluetooth receiver, and USB
storage have less coverage than local playback.

Install, update, or return to stock

Use the complete v1.1.1 installer with its matching flash tools and your own official FiiO firmware
.zip. Both the graphical and command-line installer build the image locally. No FiiO root
filesystem is included in the release.

Updating the on-device UI requires another flash; there is no on-device update path. The macOS
change in this release fixes the host-side image build process.

Back up your data and keep the installer's saved stock image on separate storage.
Run ./diskos-installer restore-stock to reflash that validated stock root filesystem, including
older short backups. The saved image is reconstructed from your firmware archive, not a dump of
your original device partition. Restore deactivates diskOS but leaves inactive files under
/usr/data; it is not a factory wipe.

You can also select Settings > System > Default UI > Stock, or hold Volume Up at power-on
for a one-time stock boot. Optional SSH Debug Mode remains off by default.

Read the README for installation,
requirements, recovery, and known issues. Do not redistribute generated diskos_*.bin images:
they contain FiiO's root filesystem.

The installer, build scripts, and documentation remain MIT licensed. The on-device UI source
is GPL-3.0-or-later. Bundled third-party components retain their own licenses.

Acknowledgements

Thanks to the contributors for their reports, tools, and fixes:

  • eudj1n reported the V2.40 image-size issue
    (#1) with a byte-exact stock rootfs reproduction,
    reported the Cyrillic rendering issue (#3),
    and built a QEMU preview harness.
  • Pierre Nel (@pierrenel) contributed the macOS
    case-insensitive-filesystem fix (PR #2).
  • zmd22 corrected the V2.40 0657 work-mode command table from
    hardware testing (discussion #6) and shared
    UI customizations (discussion #5).

Full changelog

Caution

diskOS remains an unsupported hobbyist beta. Installation rewrites the main root filesystem;
power loss, host sleep, a bad cable, a defect, an unsupported device, or an interrupted flash
can leave the player unbootable, lose data, require hardware recovery, or void its warranty.
Recovery worked on tested units but is not guaranteed. Back up your data before installing.
Not affiliated with or endorsed by FiiO, Snowsky, or Ingenic. No warranty or support is promised.

v1.1.0 - V2.40 support

Choose a tag to compare

@b0hemia b0hemia released this 20 Sep 02:52

diskOS installer v1.1.0

Adds support for the current shipping firmware (V2.40) and refreshes the bundled UI.

Highlights

  • V2.40 support. The image partition is now 768 NAND blocks so the larger V2.40 stock rootfs fits; V2.40 is flash-tested alongside V2.09 and V2.28.
  • UI refresh. Album cover flow, audiobooks, a file/folder browser, Cyrillic/Greek fonts, and safer EQ preset handling (a preset changed on the stock player is no longer overwritten).
  • Installer safety. The flasher refuses an undersized NAND writer before writing anything, and restore repads older stock backups so they still flash.
  • Licensing. Noto Sans added and Font Awesome attribution corrected.
  • SPL corresponding source ships with the installer.

Tested

Linux x86-64, end to end on hardware (V2.09 / V2.28 / V2.40). macOS builds from source but is unverified; build on a case-sensitive volume.

diskOS installer v1.0.0-beta

Pre-release

Choose a tag to compare

@b0hemia b0hemia released this 26 Aug 05:27

diskOS installer - release

Installer for diskOS on the FiiO Snowsky Disc. Runs from source with your own Python (GUI + CLI). It
builds a diskOS image from your own official FiiO firmware zip (FiiO's rootfs is never
redistributed), flashes over mask-ROM with a bad-block-aware verify-every-block writer, and keeps a
checksum-verified stock image so restore/remove is one action.

What's in the tarball

Source + the native flash tools for the platform. No bundled Python - you run it with your own.

Setup

tar -xzf diskos-installer-<platform>.tar.gz
cd diskos-installer
./install.sh          # builds a local .venv, installs pyusb + pycryptodome
./diskos-installer doctor

Needs Python 3.8+. The GUI additionally needs Tk (apt install python3-tk); device detection needs
libusb-1.0 (apt install libusb-1.0-0). install.sh checks for both and tells you what to install.

Install / restore / remove

See the bundled README.md. Requires putting the device in mask-ROM (power off, hold Vol-Down, plug
USB). ~60-90 min; normally recoverable via mask-ROM, but not guaranteed.

Honest status

Enthusiast flasher. Linux tested end-to-end on real hardware (V2.09 + V2.28). macOS build validation
in progress. Not affiliated with FiiO.