Repository navigation
Releases: LinuxJessi/Xenosaga1PythonExtractor
Release list
v1.2.1 — movies on a black bar, overlay strings and battle font in the bundles
macOS: first launch
The app is ad-hoc signed, not notarized. After unzipping,
right-click Xenosaga-I-Extractor.app → Open the first
time (or run xattr -dr com.apple.quarantine Xenosaga-I-Extractor.app).
After that it double-clicks normally.
Full Changelog: v1.2.0...v1.2.1
Full Changelog: v1.2.0...v1.2.1
Xenosaga I Extractor v1.2.0
Superseded by v1.2.1: movie subtitles on a black bar, encoder at the full slot, and bundles that include the overlay-string, battle-font and muxer work.
Third release of the Xenosaga Episode I extractor kit: everything from October 2026. Two halves: models that open in Blender rigged and textured, and a translation layer with no length limits and fonts for scripts the game never had. Packaged builds for macOS (arm64) and Windows (x64) are attached below, rebuilt with all of it; or run from source (python3 cli.py …, stdlib only). The TrueType glyph path of lang scan needs pip install fonttools uharfbuzz, which the source checkout supports; the bundles cover everything else, including hand-drawn PNG cells. Per-change notes: docs/UPDATES.md.
macOS: first launch
The app is ad-hoc signed, not notarized. After unzipping, right-click Xenosaga-I-Extractor.app → Open the first time (or run xattr -dr com.apple.quarantine Xenosaga-I-Extractor.app). After that it double-clicks normally.
Translation
- Dialogue of any length —
evt-export/evt-import(evttext.py) write every string in every scene and cutscene script as a text line and rebuild the Java classes and their FL00 container around the translation. Identity rebuild of all 567 containers is byte-exact. Mails (.uml) may grow too; their image pointers follow. - Relocation —
--growmoves an object that no longer fits its sector allocation to the end of the image and repoints its TOC entry (the engine reads by raw sector). Read back through the TOC on a scratch disc; not yet booted past the image end. - The third chain — the second DVD layer has its own ISO9660 volume with
XENOSAGA.20–.24: 266 objects (89 cutscene scripts, 58 movies, 44 voice streams, 42.fpk, 33.arc) that were only being carved as raw movie sectors. Every command sees chain 2 now. - Fonts, exactly —
font.pyturnsfont0.tex/font1.texinto four sheets of 20×24 cells and back byte-for-byte (USA and JP), with the executable's cell addressing, the 256-cell proportional block and its metrics table (right − left + 3px per glyph). The text is EUC-JP, not Shift-JIS;textpackdecodes it as such. - New scripts —
lang scanshapes a translated tree with HarfBuzz, allocates a proportional slot or kanji cell to every glyph it uses and draws them from a TrueType font (or hand-drawn PNG cells) into both faces;lang encodeshapes, measures, wraps and orders right-to-left lines with Latin runs kept forward and brackets mirrored.--extendlets two scripts share one font pair. Mixed-script words keep their Latin halves; control codes and the disc's own symbols pass through. - Verified on PCSX2 — an Arabic dialogue line in the Encephalon cold open and an Amharic U.M.N. mail body, both drawn by the game from the rebuilt fonts. Guide, worked example and captures:
docs/SCRIPTS.md.
Several of these formats were first worked out by poketony for the Korean localisation XS1KOR; the implementations here are the kit's own, against the USA disc.
Models
.lex→ glTF binary —browse --kinds modelswrites every character, enemy, weapon, mech, prop and map as a.glbwith its texture inside: 1,315 files on the retail disc, faces merged into their bodies. How-to:docs/BLENDER.md.- Skeletons decoded —
.jntis a tree of 64-byte nodes; the three stored angles are rotations about Z, Y, X in that order (settled against the running game's per-bone matrix table over PINE). Armatures land on the mesh from the files alone, hands and hair included; 760 models carry one. - Eyelashes solved — the lash material is a small true-colour alpha strip the lash polygons stretch into strokes; it had been read through a palette.
- Four texture-decoder fixes found by looking at models in Blender: two-part atlases overwriting themselves (42 character textures were beige noise), materials hidden in the vertex stream, hair-sheet true-colour regions, and UV scale on narrower atlases. 756 of 1,019 model textures change.
- Casino closed out — the menu overlay's texture descriptors supply the palettes for the card faces, slot machine and gallery (GitHub issue #1).
Pictures
In-game, from the LANGTEST disc described in docs/SCRIPTS.md:
More from the same disc, after the follow-up on main (overlay strings, the battle screen's own font, movies without libass; see docs/UPDATES.md 2026-10-15):
Blender, straight from the kit's output:
🤖 Generated with Claude Code
Xenosaga I Extractor v1.1.0
Second release of the Xenosaga Episode I extractor kit. Everything since v1.0.0 is on the extract/browse (viewing) side plus the repack/translation layer; the packaged builds are rebuilt with all of it.
Added
- Repack layer —
patchwrites any object back into the ISO in place; a byte-perfect clone of Monolith's ARX packer;pinkhairas the worked recolor example (with the disc-wide sweep for the 12 embedded copies of a character texture). - Translator text pipeline —
text-export/text-importround-trip all 914 in-game text objects (588 scene/menu.txt+ 326 U.M.N. mails) as UTF-8 with Shift-JIS byte budgets;docs/FRENCH-TRANSLATION-GUIDE.mdanddocs/ARABIC-TRANSLATION-SPEC.md. - Cutscene subtitles —
subs-template/subs-burnauthor and burn subtitles into the.pssmovies, audio untouched. - Sequenced BGM —
music-exportrenders the Procyon SMD/SWD music to MIDI + SoundFont2 + WAV/FLAC, reversed from the game's own unstripped IOP driver (SSD.IRX). - Battle voice/SE banks —
battle_audiobrowse kind, ~1,500 sample WAVs fromyamamoto/snd/sed. - Embedded texture sweep — every dump file is swept for XTX blobs inside effect/scene/UI containers: 1,363 more PNGs (title, help and menu screens, room backdrops, effect sheets) plus a per-carrier manifest.
- More content — PS2ICON3D
hdd.resunpacked; hidden string tables sniffed out of binary files (event-item descriptions, casino dialogue, EUC-JP dev configs).
Fixed
- Texture decode (GitHub issue #1) — palette tiles no longer show as a square of noise in the corner; character atlases no longer garble: raw true-colour regions (the hair sheets) are drawn from the canvas, companion-model palettes are merged (KOS-MOS's red eye), map atlases rescue their parked CLUTs, and every one of the 1,269 standalone textures decodes (was 1 undecodable).
- Casino sheets — overlay texture descriptors now supply the casino/menu palettes; the 30 numbered
tanakasheets and the data viewer render instead of magenta blocks and pink tints. UI sheets with transparent cut-outs keep their own corner-spot palette (the slot frame, pay table, neon reel labels, window sheet, card-rarity labels and the Elsa deck map had been handed washed-out palettes by the ranking). The raw-CT32 and block-rescue passes are restricted to model-bound textures after they were caught repainting the slot reels, poker felt and one slot tile with noise — verified against v1.0.0 renders decoded from the tagged code. - Scene archives — the ~500 embedded textures reported as "undecodable" were ARX-compressed in place; they are now decompressed and decoded (all turn out to be per-scene copies of standalone textures, so the manifest doubles as a scene → texture provenance map). Two garbage PNGs decoded from inside compressed streams are gone.
- BGM tempo — the driver's timebase is a fixed 96 PPQN; the first cut played the battle themes ~25% fast.
- XTX sprite files that are all 16×16 sub-images (
carddata/game/1p2p.xtx) decode.
Updated
docs/FORMATS.md— scene-archive layout (TOC + record header + ARX member), corrected repack notes, LEX/XTX palette pipeline, sequenced-BGM spec.docs/UPDATES.mdhas the per-change notes and what to re-run.- Packaging pins Python 3.12 and bundles numpy (for WAV/FLAC music rendering) and ffmpeg.
Before / after
Left or top: the earlier build. Right or bottom: v1.1.0. All renders are straight from browse --kinds textures on the retail USA disc.
KOS-MOS atlas (char/pc/kosmos.xtx) — v1.0.0 could not decode this file at all; top is the August interim build, bottom is v1.1.0 (hair band and eye).
Casino slot machine (tanaka/slot_1.xtx) — v1.0.0 vs v1.1.0. The small square of noise at the bottom of the v1.0.0 render is the parked palette tile from issue #1, blanked now.
Casino poker table (tanaka/poker_1.xtx) — v1.0.0 vs v1.1.0.
Casino data viewer (tanaka/dataviewer.xtx) — v1.0.0 vs v1.1.0.
Casino slot frame (tanaka/slot_2.xtx) — v1.0.0 vs v1.1.0. v1.0.0 already had this one right; an interim build tinted it purple, and the final decoder keeps its corner-spot palette (the parked tile is blanked).
Still imperfect: tanaka/base.png (slot symbol sheet) is tinted by a wrong overlay palette, and two small regions of the KOS-MOS atlas are plane-packed 4bpp visor-HUD sheets whose palettes are not on disc.
Samples
Short excerpts, as documentation of what the kit produces. Regenerate the full set from your own disc.
-
Music, rendered by
music-exportfrom the sequenced SMD/SWD data at the corrected tempo: BATTLE1, first 20 s · U.M.N. Mode, first 20 s -
Spoken dialogue: voice stream chain1/sound/vda/s191008, first 15 s (decoded by
browse --kinds audiofrom the interleaved SPU ADPCM streams) · cutscene layer1_021, 20 s of the dubbed track (carved from layer 1 and converted bybrowse --kinds movies) -
Battle dialogue: montage of eleven in-battle lines — KOS-MOS (special, boost, battle-end), Shion, Jr., MOMO, chaos and Ziggy, straight from the per-character
yamamoto/snd/sedbanks thatbrowse --kinds battle_audiounpacks (file nameskm_sp1,shion_end5,jr_sp6,mo_bst3,chaos_bst3,z8_end2, …). -
Dialogue text, as
text-exportandbrowse --kinds textdeliver it:U.M.N. mail scene
umn/event01.txt(speaker tags and control codes preserved):<speech>02 <char>SHION <msg> \15\2They sure did.\37 But guess what! I had the "RIOS 680RR" model even before they made their official announcement.\15\0\37 </msg>Encephalon tutorial (
scene/ST0210.evt, lifted from the Java constant pool byclasses):After a battle, you'll flash for a few seconds. During this time, you won't trigger a new battle, even if you come in contact with the enemy. Remember this, okay? You want to move on to real combat? All right then, I'll transport you to your original location after the battle is over. Are you ready?Event items (
karakama/evtitem.dat, sniffed string table):Master Key — A key to a prison cell. U-TIC Card — This card will disarm the electronic lock in corridor number 5. Flower Seed — Seed of the Ariadne flower.
Packages
Xenosaga-I-Extractor-win64.zip— Windows, embedded Python + ffmpeg, no install.Xenosaga-I-Extractor-macos.zip— macOS (Apple Silicon).app.
music-export WAV/FLAC rendering needs numpy (bundled in the packages; pip install -r requirements.txt from source).
Xenosaga I Extractor v1.0.0
macOS: first launch
The app is ad-hoc signed, not notarized. After unzipping,
right-click Xenosaga-I-Extractor.app → Open the first
time (or run xattr -dr com.apple.quarantine Xenosaga-I-Extractor.app).
After that it double-clicks normally.
Full Changelog: https://github.com/LinuxJessi/Xenosaga1PythonExtractor/commits/v1.0.0












