A static, browser-based tool for building Ren'Py-style index.txt audio
definition files from batches of .ogg files.
The client pipeline previously relied on a Python script (index.py) that
reads TRACKNUMBER metadata from .ogg files with mutagen and writes out
lines like:
define audio.character_characterline = "sound/character/character_line.ogg"
That works, but it's a one-shot CLI script with no visibility into what it's about to do, no way to reorder tracks without re-tagging files, and it halts completely on the first bad filename. FastTrack brings the same output format into a visual, drag-and-drop tool: drop files in, see everything at once, reorder or renumber by hand, fix problem files inline, export.
- Multiple containers — unlike a single-track tool, FastTrack lets you run several independent drop zones ("containers") at once, each with its own file list and ordering.
- Track numbers, three ways — read from an existing
TRACKNUMBERVorbis comment tag, typed in manually, or auto-assigned from drop/drag order if neither is set. - Drag-to-reorder — grab the
☰handle to reorder files within a container; unnumbered tracks renumber themselves automatically. - Inline validation — filenames are checked against the same rules as
the original script (single
.oggextension, exactly one underscore). Bad files are flagged in place and simply excluded from export, instead of halting the whole batch. - Zero-server — everything runs client-side. No audio file content or metadata is ever uploaded anywhere.
- Add a container: Click + Add Container for each independent batch/group you want to track separately (one is created for you by default).
- Drop files: Drag
.oggfiles into a container's drop zone, or click it to browse. Track numbers are read from tags automatically where present. - Reorder / renumber: Drag rows by the
☰handle to reorder, or type directly into the Track field to set a number manually. Click⟲on a row to release a manual/tag number back to auto-ordering. - Fix problem files: Rows outlined in red failed filename validation — hover for the reason. They're excluded from export until renamed.
- Export: Choose Combined index.txt (one file, containers separated by
#comments) or Separate .txt per container. Check Include tagged .ogg files (.zip) to also get every valid file back with itsTRACKNUMBERwritten in, laid out atsound/<gameFolder>/<file>.ogg— the same path used in the define line — so the zip can be extracted straight into the project's sound folder. Then click Export.
Matches index.py exactly:
define audio.<name> = "sound/<gameFolder>/<filename>.ogg"
where <gameFolder> is everything before the first _ in the filename,
and <name> is the filename without its extension.
A file must have:
- exactly one
.(a single.oggextension), and - exactly one
_(separating the game folder from the rest of the name)
e.g. character_characterline.ogg → folder character, define name character_characterline.
Checking Include tagged .ogg files (.zip) rewrites the TRACKNUMBER
Vorbis comment directly inside each .ogg's container (js/OggTagWriter.js)
and bundles the result with the index text(s) via a small dependency-free
ZIP writer (js/ZipWriter.js, STORE method - no point deflating audio
that's already compressed).
Only the comment header packet is rebuilt; every audio-bearing page is copied through byte-for-byte, so there's no re-encoding and no quality loss — verified by decoding both the original and tagged files to raw PCM and confirming an identical checksum. If a file can't be parsed as a single-stream Ogg Vorbis file (Opus, chained streams, corrupt data), it's included in the zip untouched and reported by name after export rather than silently dropped or blocking the whole batch.
- Format: Only
.oggis accepted, matching the existing pipeline. Tag writing additionally assumes standard single-stream Ogg Vorbis (not Opus) — the format game audio pipelines like this one use. - Metadata reading: Track numbers are read by scanning the file for a
TRACKNUMBER=Vorbis comment as raw text, not a full Ogg page parser. This mirrors the technique already used for loop-point tags — reliable for standard taggers, but not a general-purpose metadata library. - No playback / waveform: Out of scope for this tool by design; could be added later if needed.
- The Tool: FastTrack's code, layout, and design are provided as-is.
- Your Assets: You retain full ownership of any files you load or export using this tool.
- Data Privacy: FastTrack is a static client-side web app — no audio files or metadata are ever uploaded to a server.