Skip to content

gamosoft/chipsound

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Chipsound

GitHub Stars License Vanilla JS

Chipsound

What is Chipsound?

A lightweight in-browser player for the tracker music formats that powered the demoscene, the Amiga, and a generation of PC games (.mod, .s3m, .xm, .it). Open a URL or drop a module on the page and it plays. No install, no upload, no account. Everything runs client-side, every color is CSS, every visualization is real-time.

Under the hood: Chipsound doesn't decode anything itself. libopenmpt (compiled to WebAssembly via Chiptune.js) does the audio, and this project reads the playback state — channel volumes, current order/row, instrument data — to draw the pattern view, the off-thread per-channel visualizations, the mute/solo overlays, and the subsong picker. Add to that the themes, shareable ?load=<url> links, keyboard shortcuts, and the performance work to keep everything running without glitching the audio.

Skinplayer theme Mixtape theme CRT Green theme Field Journal theme
Foundry theme Newspaper theme Pocket theme Subway theme

Who is it for?

  • Demoscene fans revisiting Future Crew, Purple Motion, Skaven, Necros, and the rest of the crew
  • Retro gamers who remember when MS-DOS games shipped a .s3m soundtrack on the install disk
  • Tracker music collectors with a folder of .mod files that just need to play in one tab
  • Mobile listeners who want a tracker player that doesn't need an app store
  • Developers looking for a zero-dependency, themeable, embeddable player they can host themselves

chipsound.com   Launch the player   Support on Ko-fi

No module handy? Jump into a sample track: 2nd_pm.s3m · inside_out.s3m · MINIMUM.S3M

Why Chipsound?

Chipsound Other Players
Install None — open the URL Download + install, often Windows-only
Formats MOD, S3M, XM, IT Often format-specific
Mobile Touch + responsive Rarely
Themes Fully themeable via CSS Usually fixed
Visualizations Real-time, per-channel Limited or none
Privacy All client-side Varies
Cost Free Free or paid
Open-source MIT Mixed

Other things worth mentioning:

  • Plays anything libopenmpt can decode (MOD, S3M, XM, IT and their variants)
  • Drag a module onto the page and it auto-plays
  • Press T to cycle themes, V to cycle visualizations
  • Click a channel header to mute it; Ctrl-click to solo
  • Subsong picker for modules that ship multiple subsongs
  • ? opens the full keyboard shortcut list

Quick start

Try it now: chipsound.com/player.html to jump straight to the player.

Drop a .mod, .s3m, .xm, or .it file on the page and it plays. Tens of thousands of free tracker modules are at The Mod Archive.

Run it locally

The app is pure static HTML/CSS/JS in src/. Browsers require AudioWorklets to be served over HTTP from localhost (not file://), so pick any static server:

# Python 3
cd src && python -m http.server 8765

# Node + npx
npx http-server src -p 8765 -c-1

# Docker + Caddy
docker build -t chipsound . && docker run --rm -p 8765:80 chipsound

Then open http://localhost:8765/.

Want to open it from another device (phone, tablet, second computer)? You'll need HTTPS, put the server behind a reverse proxy or a tunnel.

Python's server caches aggressively. Hard-reload with Ctrl + Shift + R, or use npx http-server -c-1 which sets Cache-Control: no-store.

Themes & visualizations are auto-discovered from directory listings. On startup the player fetches ./css/themes/ and ./js/visualizations/ and parses the HTML index to find all *.css / *.js files. The three servers above all enable directory listings by default. If you deploy behind a static host that disables them (some CDNs, GitHub Pages with a hand-rolled config, certain nginx setups), the picker will fall back to a single built-in theme + visualization. Either enable directory listing for those two folders, or fork in a static manifest.

Load a module by URL

The player accepts a ?load=<url> query parameter pointing to any HTTP(S) URL:

https://chipsound.com/player.html?load=./tracks/awesome.s3m
https://chipsound.com/player.html?load=https://example.com/cool.mod
https://chipsound.com/player.html?load=https%3A%2F%2Fapi.modarchive.org%2Fdownloads.php%3Fmoduleid%3D212083

Loading from The Mod Archive. Modarchive's downloads.php endpoint sends the right CORS headers and works directly, but the ? inside the inner URL must be percent-encoded (%3F), otherwise the outer query parser splits the URL in two:

Keyboard shortcuts

Key Action
Space / P Play / Pause
S Stop
L Open file…
/ Previous / next order
E Toggle effects (visualizations on/off)
V / Shift + V Cycle visualization forward / backward
I Toggle samples panel
T / Shift + T Cycle theme forward / backward
? Show this help
Esc Close this help
Click header Toggle channel mute
Ctrl + Click header Solo channel (mute others)
Click grip icon in header Toggle ALL channels
Drop file Load and auto-play

License

MIT-licensed — free to use, modify, fork, embed, and redistribute. Copyright © 2026 Gamosoft.

The MIT license covers first-party code only. Bundled third-party components keep their own licenses:

Full notice summary in NOTICE.

Credits

Chipsound is a UI shell on top of other open-source work:

  • libopenmpt — the OpenMPT team's reference decoder, compiled to WebAssembly.
  • Chiptune.js — the WebAudio wrapper around libopenmpt by DrSnuggles (and originally chiptune2.js by deskjet).
  • Font Awesome — the icon set used throughout the UI.

Sponsor this project

Contributors