· via Hacker News – Front Page (native)
oTAPE 1.0 release candidate defines an open file format for digital cassettes
The oTAPE project has published a 1.0 release candidate for an open digital cassette format: one self-contained .otape file holding two fixed-length sides, artwork and record tabs, built from ZIP, JSON and AAC.

An open format for a whole cassette
The oTAPE project has published a release candidate of its 1.0 specification for an open digital cassette file format. According to the project's site at otape.org, which reached the front page of Hacker News on November 1, 2026, a single .otape file holds an entire cassette: two sides of fixed length, each one continuous recording, together with the label, the J-card, any booklet and the state of the record tabs. The file is self-contained and works offline, never linking back to the recordings it was made from or to anything online.
The specification is licensed CC BY 4.0. Notably, oTAPE is neither a codec nor a music player — it is a container that models a physical medium, limitations included.
How it behaves like tape
The format keeps constraints that streaming-era playlists discarded. Each side is one unbroken take, so the silence between songs, a spoken intro or the sound of the pause button engaging remains part of the recording. Track markers can name songs without splitting a side into separate files. Position is reached by winding rather than jumping, and a side runs to its end before the listener flips to the other one. Playing a tape never modifies the file; the player remembers the listening position on its own rather than writing it back, much as a physical cassette keeps its wind.
Inside the .otape file
An .otape file is an ordinary ZIP archive with a fixed layout. A mimetype entry comes first so tools can recognise the file without unpacking it: the magic bytes are the standard ZIP signature at offset 0, with the media type application/vnd.otape.cassette stored at byte 38. A manifest.json then describes the cassette, its two sides and its appearance, followed by one audio file per recorded side — a blank side is simply omitted — plus optional artwork and document directories.
AAC-LC in M4A is the only codec every conforming player must support, with ALAC, FLAC and PCM as optional alternatives. The timeline is expressed in integer frames at 44.1 or 48 kHz, exact to the sample. Versions follow a MAJOR.MINOR scheme in which minor releases may only add optional fields, and unknown data is preserved on rewrite. Shell and label artwork can be supplied as images at fixed physical sizes, or described in a few lines of JSON that any player can render.
Fixed lengths and write-protect tabs
Tape lengths mirror the real thing: C46, C60, C90 and C120 are defined, and a custom tape is named C plus its total minutes, with length and thickness derived from the reel model in Appendix B.3 of the spec. Each side carries a record tab that can be broken to protect a finished tape from accidental re-recording. The site is explicit that this is not DRM — as with a physical cassette, anyone can cover the hole and record again.
Machine emulation applied at playback
A cassette never sounded the same in two decks, and oTAPE players can reproduce that. The project describes four modelled effects: wobble, covering both slow pitch drift (wow) and fast flutter; hiss that runs only while the tape runs; warmth, the rounding of recorded peaks that begins with the treble; and wear, which dulls the top end, causes brief dropouts and can smear the stereo image.
None of this is baked into the recording. The machine character is applied while you listen, the .otape file stays untouched, and listeners can switch machines mid-song. Machines are themselves small open presets — .otsound files written in physical units such as percent of speed, decibels and hertz — so a given preset renders identically in any player. Six presets ship built in, and users are invited to build and share their own.
A reference deck in plain JavaScript
The project ships a browser-based cassette deck of roughly 1,200 lines of plain JavaScript with no libraries. It plays any .otape file dropped onto it and keeps files local to the browser rather than uploading them. The deck comes loaded with a demonstration tape, Gitsem by Mirat Can Bayrak — a song the site says he wrote at 24 and recorded again at 42 — and supports keyboard controls for playing, rewinding, fast-forwarding, flipping and ejecting.
Why it matters
Most audio packaging optimises for convenience: instant seeking, shuffle, cloud libraries. oTAPE argues the opposite — that a fixed length, a hand-sequenced order and a single self-contained object are qualities worth specifying rather than obstacles to remove. Because the format is assembled entirely from standard parts (ZIP, JSON, AAC, PNG and JPEG), it can be read with tools that already exist, and its versioning rules and permissive licence point at long-term interoperability rather than lock-in.
For musicians, it offers a deliberately constrained release format where sequencing and runtime are part of the work. For archivists, it is a preservation-friendly bundle that keeps artwork, notes and recording history alongside the audio in one offline file. With the spec at release-candidate status, the design is effectively feature-complete but still open to feedback — which makes this the natural moment for potential implementers to test it and comment before 1.0 is finalised.
- #file-formats
- #audio
- #open-source
- #cassettes
- #retro-tech