forked from sasq64/chipmachine
-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathnot_supported_extensions.txt
More file actions
433 lines (380 loc) · 22.9 KB
/
Copy pathnot_supported_extensions.txt
File metadata and controls
433 lines (380 loc) · 22.9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
# --- scene.org / Fujiology demoscene-compo oddities (2026-07-10) ---
# These reached the index via URL onboarding tagged with a generic platform
# string ("Demoscene"/"Windows"/"Linux"/"TIC-80") that resolves to no hardware,
# so they surfaced in the "no screenshot / no platform logo" audit. On review
# none has a decoder in our stack -- they are archives, commercial DAW projects,
# executables, or hardware trackers with no open replayer -- so indexing them
# only yields broken GUI entries. Skip them. (mon/ntk from the same audit ARE
# playable and were fixed in MusicDatabase.cpp instead.)
# compression archives, not music formats (compo entries submitted as archives)
.arj
.lzx
.tgz
.xz
.img
# .one -- unidentified container ("modk.one"); no reader
.one
# FL Studio (FruityLoops) project -- commercial DAW, no open renderer (cf. renoise/psy)
.flp
# 32k executable-music intro (Windows PE), not a decodable module
.ps1
# TIC-80 fantasy-console cart -- no TIC-80 music replayer in the stack
.tic
# Dirtywave M8 tracker song -- hardware tracker, no open replayer
.m8s
# unidentified obscure demoscene formats, no decoder anywhere
.legoz
.asg
# .snort -- 2 scene.org "mod.snort" files, no .snort route/decoder
.snort
# (.ac3 Dolby AC-3 and .mpeg raw MPEG audio are NOT skipped -- they are wired
# into FFMPEGPlugin's ffmpeg gate and play as audio.)
# renoise commercial player
.rns
.xrns
# psycle tracker -- no decoder
.psy
# sound club (bluemoon software; PC/DOS+Win, NOT amiga). .sn = DOS 1993,
# .sn2 = win95/nt sequel "sound club 2" (magic SN2\xd2, little-endian IFF-like
# chunks NAM/SEQ/PAT/pna/voi). pattern data is parseable but modules carry NO
# sample/instrument data -- voices come from the closed built-in bluemoon synth,
# so playback needs full RE of the win32 engine. no open replayer anywhere
# (UADE/OpenMPT/libxmp/ZXTune/rePlayer/NostalgicPlayer/vgmstream). OpenMPT's
# "Sound Club 2" string only labels S3M *exports*, it can't read native .sn/.sn2.
.sn
.sn2
# zx spectrum flash tracker -- nothing exists to decode
.fls
# beaver sweeper (modland "Beaver Sweeper", author Steffo, 4 .gtk tunes, magic
# "+SNT"). NOT a live ext-line: .gtk is owned by OpenMPT for Graoumf Tracker
# (magic "GTK"), which plays fine. the +SNT files are an unrelated, undocumented
# format with no open replayer anywhere (OpenMPT/UADE/libxmp/NostalgicPlayer);
# UADE's PTK-Prowiz routes them via the snt prefix but renders pure silence.
# OpenMPTPlugin::canHandle content-gates .gtk on "GTK" so these Skip cleanly
# instead of hard-FAILing. documented here, intentionally commented out.
# .gtk
# .MUS upper case fcatrin/fstr (MIT), is x86 real-mode asm
# targeting AdLib OPL2 (wrong chip, not portable C).
# commented but documented due to .mus lowercase clash
# axs softsynth/tracker (resolution audio, www.resolutionaudio.nl; closed
# commercial DOS 2.x + Win32 3.x, freeware since 2001). IFF container
# "FORM <size> AXSF" with USER/SHDR/SONG/BLOK/TRAK/INST/INNM chunks. The
# sequencer/pattern data is parseable, but the INST chunks are SYNTH PATCHES
# (a Roland JP8000-style softsynth model) -- there is NO sample/PCM data in the
# file, so voices come entirely from the closed built-in DSP engine. No open
# replayer anywhere (UADE/OpenMPT/libxmp/ZXTune/rePlayer); playback needs full
# RE of the win32/dos synth. Same dead-end as .psy/.sn. ~22 tunes on modland.
.axs
# atari falcon ace tracker -- only falcon or port whole emulator
.am
# shroom tracker -- no decoder
.sho
# jeskola buzz -- modular daw, needs closed win32 x86 machine dlls
.bmx
# piece music driver (pc-98, chemool) -- NOT kaja pmd (which is .m/.m2/.mz);
# distinct custom opna driver, no open replayer exists (98fmplayer, pmdwin,
# mdplayer, rePlayer all reject it). needs full driver RE.
.pmd
# stonetracker (amiga, 8-voice software mixer; .spm=song + .sps=sample bank
# pair, magic SPM\x02 / SPS\x02; modland Stonetracker/). NO open replayer:
# UADE ships no eagleplayer, not in rePlayer/libxmp/OpenMPT. Only source is
# Marty's x86 DOS/GUS hardware-mixing player -- no portable software mixer to
# lift. Needs full playroutine + format RE. Removed from UADE supported_ext so
# they Skip instead of hard-FAIL.
.spm
.sps
# dux (amiga). Was listed in UADE supported_ext but UADE has NO player for it --
# no eagleplayer.conf prefix, no amifilemagic content detection, no player binary
# anywhere in the vendored 3.05 tree. Every .dux module therefore just FAILED
# ("score died"). No open replayer found (UADE/rePlayer/libxmp/OpenMPT none).
# Removed from supported_ext so they Skip instead of hard-FAIL. Re-open if a dux
# eagleplayer lands upstream.
.dux
# 670 (modland "Composer 670 (CDFM)", 7 tunes) -- SHIPPED, no longer unsupported.
# The .670 is the demo/stripped layout of the C67 format: a compact 10-byte
# header (byte0=speed 1-15, orderListLen, numPatterns, numDigInst, numOPLInst,
# loopDest, u32 sampleOffset), no instrument names, and only a pattern *offset*
# table -- so libopenmpt's Load_c67 (which wants the unpacked 1954-byte named
# header + offset/length table) rejects it directly. But the pattern byte-stream
# and the 16-byte PCM / 11-byte OPL instrument structs are byte-identical to C67,
# so OpenMPTPlugin::convert670ToC67 repacks .670 -> C67 in memory (fill names
# with zeros, synthesize the 128-entry length table, pad each pattern to >=3
# bytes, lay patterns in index order so pattern 127 ends exactly at the sample
# blob, append sum(sampleLengths) PCM bytes) and hands the result to libopenmpt.
# canHandle content-gates on a clean conversion. Verified: all 7 modland tunes
# convert and pass Load_c67's ValidateHeader + pattern/sample bounds (3421 note
# events for amnesia-intro, sample region byte-exact). The old "no depacker
# exists" verdict was wrong -- the format is fully documented (shikadi CDFM_Format)
# and Composer's own 670TOC67 converter exists.
# Skale Tracker for PC by Baktery: No open replayer and no public spec exist
.skm
# CyberTracker (C64 SID, CyberBrain/No Name; native magic NNTRKMZX, song PRG @
# $0400). The only public converter (DOS ctpacker BETA) is broken (malloc/DPMI),
# and a native plugin would need full RE of the .ct->SID packer. Low value: the
# composers' own packed SIDs are already in HVSC and play via csidplugin (cSID).
.ct
# POLYTONE (.pol, prochazkaml) -- the PC-speaker sibling of MONOTONE played by
# the same PTPlayer. Support was dropped from the monotone plugin: the only
# public sample (PTPlayer's jakim.pol) is format version 2, while both our
# vendored engine and current upstream PTPlayer only parse version 1
# ("\x08POLYTONE\x01"). With no playable v1 fixture, .pol is documented here
# rather than advertised. Re-add to monotoneplugin supported_ext if v2 lands.
.pol
# game boy tracker / paragon 5 (s.hockenhull). .mgb = the editor's serialized
# project file ("GameBoy Music Module" tagged tree), NOT a gb rom -- so GME's
# game boy emu can't run it directly. Only the closed pt.exe reads .mgb; the
# open replayer (gbdev/GBSoundSystem) consumes the tracker's EXPORTED .z80/.inc
# driver data, not raw .mgb. No portable open parser anywhere (UADE/OpenMPT/
# libxmp/ZXTune/rePlayer/GME/vgmstream). RE-prototyped: container + note stream
# are decodable (plain binary, not compressed) but full support = leaf decode ->
# driver data -> RGBDS harness rom -> GME, with no headless reference to validate
# against the closed gui. Parked. Re-open if a portable .mgb player lands.
.mgb
# all sound tracker (.ast, modland "All Sound Tracker"). NOTE: .ast is shared and
# NOT fully unsupported -- UADE's "ActionAmics" eagleplayer plays the V0.1 binary
# replay dumps (pointer table + "ACTIONAMICS SOUND TOOL V0.1", e.g. dynablaster.ast),
# so no bare ".ast" line here. But the modland corpus is the tracker's NATIVE
# versioned save format (Pascal-string magic \x08"AST 00xx": "AST 0001","AST 0032"
# ...), a different layout the V0.1 testversion player cannot parse -- it loads,
# runs and emits silence while UADE reports success. No open replayer exists for
# the native format. UADEPlugin::canHandle declines it (isAllSoundTrackerNative)
# so those files Skip cleanly instead of false-positiving as a silent "ok". Re-open
# if a player for the "AST 00xx" native format lands.
# edlib packed (.edl, modland "Ad Lib/EdLib Packed", ~179 tunes; JCH/Vibrants'
# 1994 DOS AdLib/OPL2 tracker). EdLib has TWO formats: .d00 is the EXPORTED,
# documented, playable file (magic 'JCH'\x26\x02\x66, played by AdPlug's d00.cpp
# "Packed EdLib"), while .edl is the tracker's NATIVE editor PROJECT file --
# undocumented (the modland format doc covers only .d00) and not a disguised D00:
# flash2.edl has no 'JCH' magic, fails Cd00Player v0/v1 validation, and its
# verbatim-repeating 15-byte byte patterns rule out it being an aPLib/LZ-packed
# D00 (so adding .edl to adplugin supported_ext would NOT help). No open replayer
# or .edl decoder exists anywhere. The replayer for the OUTPUT already ships
# (AdPlug d00.cpp); the only gap is .edl->.d00 conversion, which EdLib 1.05a
# itself does deterministically. Fix = OFFLINE batch-convert the corpus to .d00
# (DOSBox EdLib, or RE the native format against the editor's in/out) then onboard
# the .d00 -- data-only, zero new in-app code. Parked; not worth an in-app decoder.
.edl
# forgotten worlds game music (.fw, magic "FWMP", modland "Forgotten Worlds/
# Mark Cooksey", ARC Developments / adapted by Psygore). NOTE: no bare ".fw"
# line -- UADE has a ForgottenWorlds_Game eagleplayer (prefix fw) that LOADS and
# runs, but it emits pure silence on all five modland tunes. Verified against
# upstream uade123 3.05: every .fw renders as silence (peak 0/0) while a TFMX
# module renders loud, so this is a player bug in UADE itself, not our wiring,
# and is unfixable without RE-patching the player binary. UADEPlugin::canHandle
# declines the FWMP magic (isForgottenWorlds) so they Skip cleanly instead of
# reporting NO SOUND. Re-open if a working ForgottenWorlds player lands upstream.
.fw
# picatune (.smufi, modland "Picatune", 20 tunes by BeRo/FreQvibez/Lyzzard).
# BeRo's (Benjamin Rosseaux) Picatune / Picatune 2 is a CLOSED-source freeware
# Win32 synth-sequencer; the .smufi ("Picatune Soundtrack") is an XML PROJECT
# file describing a softsynth patch graph -- <operator> nodes (master/delay/
# compressor/generator), <oscillator> waveforms with ADSR, and <order>/<pattern>
# sequencing. There is NO sample/PCM data: every voice is produced by Picatune's
# built-in DSP, so playback needs the closed engine. No open replayer exists
# anywhere (UADE/OpenMPT/libxmp/ZXTune/AdPlug/rePlayer none parse this XML synth)
# and the synth semantics (oscillator modes, waveform tables, x/y operator
# routing, phasefactor/color params) are undocumented -- same dead-end as
# .axs/.psy. Without this line each .smufi just downloads (FTP CODE 226) then
# stalls with no decoder. NOTE: unrelated to Shiru's ZX-beeper "Picatune2"
# (.pt2). Re-open if BeRo opens the engine or a portable player lands.
.smufi
# berotracker (.brt, modland "BeRoTracker", 19 tunes). BeRo's (Benjamin
# Rosseaux) own module tracker -- closed-source Delphi/FreePascal Win32 app,
# source never published (not among his ~50 github.com/BeRo1985 repos). The
# .brt format itself diverged from IT into its own engine and is undocumented;
# OpenMPT's own open feature request for it (bugs.openmpt.org #1483) has sat
# unresolved since the maintainer judged BRT "more advanced than OpenMPT in
# several ways," making any reimplementation "almost guaranteed to be a lossy
# conversion" -- their suggested fix was BeRo adding an in-app BRT->IT
# exporter, not something we control. No open replayer parses .brt anywhere
# (UADE/OpenMPT/libxmp/ZXTune/AdPlug/rePlayer). Same dead-end shape as BeRo's
# other closed format above (.smufi). Re-open if BeRo publishes the format or
# a portable player lands.
.brt
# atari exexutable, pruned from db but just in case:
.xex
# 0CC-FamiTracker (.0cc, BotB corpus). Carries the SAME "FamiTracker Module" magic
# and file-version 0x0440 as a plain .ftm, so the shipped FamiTracker CX engine's
# gate accepts it -- but 0CC's headline feature is multichip expansion the engine
# never implemented. Tested 20 real BotB .0cc files through famitracker-cx: only
# ~40% play; ~50% throw UNIMPLEMENTED_CX ("Instrument not supported" -- N163/
# INST_N106 and Sunsoft-5B/INST_S5B are commented out in FtmDocument.cpp), and
# ~10% HARD-SIGSEGV during render (CTrackerChannel::SetNote deref of a NULL channel
# at TrackerChannel.cpp:47 -- the module addresses N163 x8 / 5B channels the
# ChannelMap never allocated). The crash is a raw signal, NOT a catchable
# FtmDocumentException, so a bad .0cc takes down the whole app, and it fires mid-
# song (past load) so "loads OK" is no guarantee. Adding "0cc" to
# famitrackerplugin supported_ext was tested and REJECTED -- 40% playback isn't
# worth a >=10% process-crash rate. Proper support needs a 0CC-aware engine
# (N163/5B channels + expansion ChannelMap + extended blocks), a real upgrade.
# See botb-onboarding memory. Re-open if the engine is upgraded.
.0cc
# 0CC-FamiTracker compact export (.kftm, BotB corpus). NOT the "FamiTracker Module"
# block container at all -- magic is "kftm\x01\x00" followed by a 32-byte inline
# song name. base famitracker-cx has no reader for this format, and it shares the
# N163/5B expansion dead-end above. Would need its own parser AND a 0CC-aware
# engine. Parked with .0cc.
.kftm
# --- demoscene executables / disk images, 2nd pass (2026-07-14) ---
# Same class as the .ps1/.tic entries in the 2026-07-10 block above, found by
# re-auditing the whole live index (776,777 rows) for extensions that route to
# no plugin and are not listed here. All reached us through demozoo/scene.org
# compo-directory URL onboarding: they are ROMs, disk/tape images and native
# executables whose music is produced by running the machine code, not by
# decoding a module. Playing any of them means hosting the whole target system
# (a C64/CPU+VIC+SID, a 6502 NES, a 68k Genesis, an x86 PC), which no plugin in
# the stack does -- GME plays the *ripped* chip logs (nsf/gbs/vgm/sid), never
# the parent ROM or image. Each just downloads and then dead-ends in the GUI.
# c64 disk image (compo entries submitted as a whole .d64 disk, not a .sid rip)
.d64
# native executable music (DOS/Windows PE "executable music" compo entries)
.exe
# ines nes rom -- executable music as a cartridge image, not an .nsf rip
.nes
# sega genesis/mega drive rom -- likewise not a .vgm/.gym rip
.gen
# zx spectrum / c64 tape image (beeper + ay compo entries shipped as .tap)
.tap
# .tsd -- 26 files, two unrelated dead ends that share the extension: 24 are
# Fujiology Atari ST compo files (MUSIC/FT/TUNEZ/T/TAO/TSD/), and 2 are modland
# "TSS/- unknown/galg main.tsd|galg title.tsd" -- i.e. members of the TSS format
# dir, whose own .tss tunes are equally undecodable (no open TSS replayer in
# UADE/OpenMPT/libxmp/ZXTune/rePlayer). NOT a demoscene executable like the rest
# of this block; documented here because both variants are unplayable today.
# Re-open the modland pair if a TSS replayer ever lands (it would cover .tss too).
.tsd
# .spi -- 3 Fujiology files, all under MUSIC/FT/TUNEZ/G/GEM_TWO/EPSS/. Unidentified
# Atari ST "EPSS" format; no reader anywhere in the stack and no public spec found.
.spi
# --- MusicMaker V8 instrument packs indexed as songs (2026-07-14) ---
# modland "MusicMaker V8 Old/- unknown/" ships 7 files: 2 real tunes
# (best of guitars.sdata, moveback.sdata -- "sdata" is a UADE supported_ext,
# eagleplayer.conf "MusicMaker-8V prefixes=mm8,sdata") and 5 members of their
# 3-part instrument pack. UADEPlugin::getSecondaryFiles already pulls the pack
# in for the .sdata ("<name>.ip" samples + "<name>.ip.l"/"<name>.ip.n" metadata,
# see UADEPlugin.cpp ~line 826), so the packs must NOT be indexed as standalone
# songs -- they are not tunes and render nothing on their own. Skipping them here
# does not affect the .sdata tunes, which keep fetching all three parts.
# test.cpp's shouldIgnoreFile already treats ip/.ip. as aux for the same reason.
.ip
# The pack's other two members (".ip.l"/".ip.n") are deliberately NOT listed.
# They route on the last dot, i.e. "l" and "n", and single letters collide with
# Amiga prefix-form names whose TITLE happens to end that way: adding ".l" was
# tried and immediately dropped a real playable tune --
# "/Demo/Larsen_Sten/Egregious.lha/unic.take-no-fab by s.l.l", which routes on
# its "unic" prefix (UnIC Tracker, a UADE supported_ext) and only looks like a
# ".l" file to an extension matcher. ".n" measured clean today, but it is the
# same shape and one new title ending in ".n" would silently kill a good song.
# The 3 leftover .ip.l/.ip.n rows stay indexed; that cosmetic wart is a better
# trade than a routing regression. A companion-aware indexer rule (cf. test.cpp
# shouldIgnoreFile's ".ip." pattern) is the right fix if it is ever worth doing.
# liquid tracker (.liq, modland "Liquid Tracker/", 13 tunes; Nir Oren's mid-90s
# DOS tracker, magic "Liquid Module:"). TESTED AND REJECTED -- do NOT wire up
# libxmp's liq_loader. The loader exists and is already vendored under
# zxtune/3rdparty/xmp, and a slice plugin (the musxplugin/fnkplugin pattern)
# builds and plays: 10 of 13 tunes render audio. But its parse DESYNCS on 5 of
# the 13, tripping libxmp's own asserts:
# liq_load.c:489 assert(b[] == "LDSS") background/name/part of the sky
# liq_load.c:209 assert(event->note <= 107 ...) free mind
# liq_load.c:443 assert(event->fxt <= 26) free space
# Those asserts are LIVE in our build -- the tree overrides CMAKE_C_FLAGS and
# never defines NDEBUG (check: build.ninja FLAGS for any xmp slice has no
# -DNDEBUG despite CONFIG=Release) -- so each of those 5 files abort()s the whole
# app, not just the tune. Compiling the slice with -DNDEBUG "fixes" the abort but
# is worse: assert(event->note <= 107) and assert(event->fxt <= 26) guard ARRAY
# INDICES, so silencing them turns a clean abort into out-of-bounds reads with a
# desynced parse (and background.liq renders pure silence either way). Same call
# as .0cc above: partial playback is not worth a ~38% process-crash rate. Real
# support = fixing libxmp's liq loader upstream (the 1.xx instrument/pattern
# layout it mis-seeks), not wiring it in as-is. Re-open if libxmp fixes it.
# NOTE: Funktracker (.fnk) from the same triage was the opposite result -- 7/7
# tunes clean with asserts live -- and SHIPPED as fnkplugin.
.liq
# --- companion files indexed as standalone songs (2026-07-14) ---
# These are support files, never tunes: they carry no sequence data and render
# nothing on their own, but modland/AMP ship them next to the songs and the
# indexer listed them as rows. The plugins already fetch each one as a secondary
# file of the tune that needs it, so dropping the standalone rows costs nothing.
#
# SAFE ONLY BECAUSE THE GATE IS MULTI-AWARE: all three of these also appear as
# the FIRST member of MULTI: groups whose later members are real, playable tunes.
# songIsUnsupported() (MusicDatabase.cpp) skips a group only when EVERY member is
# unsupported, so the groups below survive while the standalone rows are dropped.
# Listing any of these under a first-member-decides gate would have deleted 451
# playable songs (74 Quartet .4v + 374 .minipsf2 + 3 .smus). Keep that in mind
# before adding any further companion extension here.
# quartet st sample bank ("SMP.set" / "<tune>.set"), paired with the .4v songs
# that quartetplugin plays. 149 standalone rows; the 9 "MULTI:.../SMP.set + .4v"
# groups keep working.
.set
# playstation 2 sound format shared driver/sample lib, referenced by the
# .psf2/.minipsf2 tunes in the same dir (aoplugin pulls it in as a psflib).
# Never a standalone row today -- all 6 rows are MULTI groups that survive -- so
# this line is pre-emptive: it stops a bare "*.psf2lib" from ever becoming an
# entry if a future rip lists one.
.psf2lib
# edlib d01 (.d01 song + .s01 instrument bank, modland "Ad Lib/EdLib D01/JCH/",
# 3 tunes = 6 rows). TESTED, DO NOT "just add d01 to adplugin supported_ext" --
# that would make canHandle claim the file and fromFile then fail, turning a
# clean Skip into a hard FAIL. AdPlug's Cd00Player rejects these two ways over,
# verified by linking libadplugin.a directly and calling Cd00Player::load():
# crooner.d00 -> LOADED (control) crooner.d01 -> REJECTED
# crooner.d01 renamed to .d00 -> STILL REJECTED
# Why: D01 is NOT a renamed D00. Decoded against the real d00header (id[6] then
# type,version,speed,subsongs,soundcard) the marker byte differs --
# .d00 = type 0x00 / version 2 (single file, instruments inline)
# .d01 = type 0x80 / version 1 (song only)
# .s01 = type 0x01 / version 0 (the external instrument bank)
# so the v2-4 branch (needs type==0) declines, and the fallback v0/v1 branch
# hard-requires a ".d00" extension *inside the library* (d00.cpp ~line 92); after
# a rename it passes that but then reads a d00header1 at offset 0, where "version"
# lands on the 'J' of the JCH magic (0x4A > 1) and rejects again. Not the
# "reheadered old-style song" case either -- there is no valid old header at 0x6b
# (reads version=219, i.e. song data). Cd00Player only plays single-file modules
# with instruments inline; D01 splits the ~20KB bank into the .s01, so real
# support means REing the D01 layout + external-bank resolution.
# ROI is poor: of the 3 tunes, "crooner" and "the alibi" ALREADY play from
# "Ad Lib/EdLib D00/JCH/" (both verified LOADED), so only "gorgeous" is net-new.
# Same dead-end shape as .edl above. Re-open if an open D01 reader ever lands.
.d01
.s01
# stale editor backups: modland's "IFF-SMUS/Dr. Awesome/*/[Awesome-N].SMUS.bak"
# and one chipmusic.org "dj-brama-style_kamu.mp3.bak" (an S3 backup artifact
# whose ".bak" tail hides the .mp3 from FFMPEGPlugin's ext gate, so it dead-ends
# instead of playing). The 3 SMUS groups keep their playable .smus members.
.bak
# --- demozoo archive contents, from the member peek (2026-07-15) ---
# The 17k demozoo "Demoscene" archive rows now carry the REAL inner format in
# their `ext` column (filter_demozoo_archives.py --classify reads each archive's
# member list over HTTP Range), which is what finally makes this list reachable
# for them: songIsUnsupported() matches `ext`, and every archive row used to say
# "zip". These are the formats left in archives holding nothing playable -- each
# verified to be claimed by NO plugin (cmtest priority_map), so nothing is being
# hidden that we could decode. The rows stay in demozoo.txt on purpose: adding a
# decoder later means deleting a line here + a reindex, not re-onboarding.
.adf
.bin
.com
.dll
.emd
.font
.iff
.j98
.mmd
.oss
.pp
.rbs
.sample
.t64
.wmv
# Archives whose only content is a readme -- ~100 scene.org compo entries are a
# lone .txt (occasionally .nfo/.diz): the tune was never uploaded, so the row is
# a dead search hit that errors with "No playable tracks in archive". The peek
# reports the readme as the row's `ext` (filter_demozoo_archives.py
# first_member_ext) precisely so these lines can gate them. Safe: no plugin
# claims txt/nfo/diz, and no collection uses them as an ext -- these lines can
# only ever match an archive that contains nothing else. Not deleted, so a
# re-upload upstream just needs a re-peek.
.txt
.nfo
.diz