Asset viewer
Open up Legend of Legaia and look at every 3D model and every texture on the disc, without installing a thing.
3D model browser
Bring your own disc
This viewer doesn't ship any Sony bytes. Provide a .bin Mode2/2352 image of Legend of Legaia (NA SCUS-94254). A single .tim file also works for one-off image previews.
Files are read locally; nothing is uploaded. The disc is cached in the browser (IndexedDB) and shared across pages, so it auto-loads on reload - hit Forget on the chip to clear it.
PROT.DAT TIM catalog
Every texture in PROT.DAT stored as plain, uncompressed bytes, each with a stable id you can link back to.
Click any thumbnail to load it full-size; the CLUT dropdown switches between an image's palette (CLUT) variants.
Load a disc (or raw PROT.DAT) above to browse the TIM catalog.
Compressed textures (LZS-embedded)
The character and scene textures the catalog above can't see: LZS-compressed inside PROT.DAT, recovered by decompressing every entry and keyed by entry, section, offset.
Click any thumbnail to load it full-size and switch CLUT variants, as in the catalog above.
Load a disc (or raw PROT.DAT) above to browse the compressed textures.
About this viewer — what it shows, how to drive it, provenance
You supply the game. This site ships no game data. Point it at a
.bin disc image of your own copy and it is parsed locally in the browser by the
project's parsers compiled to WebAssembly - nothing is uploaded.
The page opens the disc's main archive, PROT.DAT, three ways: a
3D browser for every model, a texture catalog for
plain-bytes images, and a compressed textures grid for the
rest.
Using the viewer
PROT.DAT is a numbered list of entries;
the 3D browser lists every entry holding a model - Legaia's house variant of the PlayStation
TMD mesh format, textured with standard
TIM images through the same paletted shader the native engine
uses (switch textured off for flat shading). Pick from the sidebar or jump to an
entry by number.
Everything exports. ⬇ .glb downloads the current 3D view - single mesh, or the whole assembled town in full-map mode - as a binary glTF with textures baked from VRAM; ⬇ PNG downloads the selected texture in its current palette. In full-map mode a VR button presents the town over WebXR (VR mode; needs Chrome/Edge with SteamVR and a secure context).
Battle stages are not shown raw. A scene_tmd_stream entry holds
half a backdrop shell; the game draws that mesh twice, the second copy either
half-turned or reflected, and lays its tiled floor underneath. The viewer places them the same
way, and the status line names which transform the executable picked for that stage. Two
entries can be the same bowl byte for byte and still be placed differently - the choice is
per-stage data the game carries in a table, not something the mesh implies, so a stage that
looks rotated against its twin elsewhere is showing you the table
(why).
Sound and cutscene video on disc live on the media browser. The native build adds stage geometry and cross-PROT-entry CLUT chains (via --vram-extra-dir):
./target/release/asset-viewer prot extracted/PROT.DATTexture catalogs — provenance and validation
The TIM catalog matches jPSXdec's TIM index exactly (same offsets, dimensions, palette counts) - a useful outside check - and also reaches the archive's unindexed system-UI gap, such as the menu-glyph sheet.
In the compressed-textures grid every hit is validated on the output - the decoded bytes must strictly parse as a texture and decode to real pixels, because “it decompressed without error” proves nothing on its own (Legaia LZS).
Run the engine on this scene
Everything above is the disc at rest. To see the engine run - the field VM stepping, NPCs moving, dialogue playing out - head to Play the port; it boots the same disc (already cached in your browser) into any town or field map and hands you the controls.