A searchable, tag-based, login-free registry to upload and find
.track parts — instrument packs, waves, motifs, tunings, full songs.
Live at trackyard.p11c.xyz, part of the
game-audio ecosystem.
Drop a .track file — no login, no account. Every upload is loaded
through game-audio and written back out (parse →
Display), which has three effects:
.track.Uploads must also be complete: every instrument used by a note or motif placement, every waveform used by an instrument, and every placed motif must be defined in the file or provided by one of its imports. Incomplete uploads are rejected with a list of what is missing. (If the track has URL imports, this check is deferred to rendering, since the server does not fetch URLs during upload.)
Uploading requires agreeing that the track is published under CC0 — everything in the registry is free for anyone to use. The upload limit is 1 MB.
An entry's id is a hash of its musical content — metadata (title, author, description, tags) is excluded. That gives two guarantees:
Uploading a changed version of a track is a new entry by design — content is immutable.
Tracks may import other tracks (@import) under a strict policy.
Allowed are exactly:
| Form | Example | Meaning |
|---|---|---|
std: libraries | @import std:drums |
Instrument banks bundled with game-audio. |
http(s) URLs | @import https://…/lib.track |
Any track on the web. Fetched by the server when rendering and by the browser when playing. |
| Bare registry filenames | @import a1b2c3….track |
Another registry entry by its id. Resolves on the server, in the browser (relative to the download URL), and inside a clone of the mirrored library, where all tracks sit flat in one directory. |
Anything else — relative or absolute local paths from the uploader's machine — triggers a replacement form: each offending import gets a field (with autocomplete over all registry tracks) to substitute a URL or a registry entry, and the upload proceeds with the rewritten imports.
Every entry carries two kinds of tags:
song or part (has playable layers or not), plus
sounds, waves, motifs, tunings
for whatever the file defines.nes, lead, boss-theme, …).The file's own ## Tags section (under # Meta) is the
source of truth: tag edits are written back into the stored .track, so
a part stays self-describing outside the registry too.
Tags are normalized to lowercase a-z, 0-9 and
-; anything else becomes a dash. Boss Theme,
boss_theme and boss-theme are the same tag. At most 16
tags of up to 32 characters each.
Ownership is a visitor cookie — still no login. The uploader (and the admin) can edit an entry's metadata: title, author, description, and tags. The musical content is immutable.
Uploading redirects straight to the edit page, pre-filled from the file's own metadata. The tag menu lists every existing registry tag with its usage count, filters as you type, and offers a marked (new) chip when the name matches nothing — adding and removing tags works without page reloads.
The index filters by free tag (?tag=chiptune), by content
(?auto=waves), and by text search over title, author, description and
tags — all combinable. Sort criteria: newest, most downloaded, most liked, best
like/dislike ratio, most controversial; each reversible.
Anyone can vote 👍/👎 (one vote per visitor, toggleable). Downloads are counted per entry.
#url=…) — open
a track in the editor and build on it.| URL | What it serves |
|---|---|
/ | Index: search, filters, upload form. |
/entry/<id> | Entry page with previews. |
/entry/<id>/edit | Metadata + tag editor (owner/admin). |
/download/<id>.track | Canonical download (stable, CORS-open). |
/tracks/<author>/<title>.track | Human-readable alias of the download,
ready for @import. Follows metadata edits; the id URL is the stable one. |
/export/<id>/wav, …/mp3 | Rendered audio. |
/preview/<id>/<layer|sound|wave>/<n> | Preview snippets. |
/admin | Admin login. |
If the data directory is a Git repository, the server commits and pushes all
track changes about once a minute — the registry doubles as a public, forkable
library. Only canonical .track files are published; the rendered audio
cache, deleted entries, and the JSON index (it contains visitor ids) are kept out
via a generated .gitignore.
git -C data init -b master
git -C data remote add origin <public repo url>
A random admin token is printed on the server console at every start. Logging in
at /admin allows editing and deleting every entry. Deleted tracks are
moved to deleted/ inside the data directory, never destroyed.
trackyard [--address host:port] [--data directory] [--public-url url]
[--player-url url] [--editor-url url]
| Flag | Default | Purpose |
|---|---|---|
--address | 0.0.0.0:3000 | Listen address. |
--data | data/ | Storage: canonical tracks, JSON index, audio cache. No database. |
--public-url | http://localhost:3000 |
Base URL used in play/remix/import links. |
--player-url | https://p11c.xyz/plainaudio/ |
plainaudio instance for play links. |
--editor-url | https://p11c.xyz/plainsong/ |
plainsong instance for remix links. |
Source: gitlab.com/porky11/trackyard (Rust, axum + maud + game-audio; MP3 export needs a C compiler at build time).