A collection of tools for modding Final Fantasy VIII (PC/Remaster), all bundled behind one
launcher: FF8UltimateEditor.exe (or python main.py). Pick a tool from the "Hobbit tools" dropdown
at the top of the window, or launch one of the external programs from the toolbar next to it.
A command-line interface (cli.py) is also available for scripting text import/export without
opening the GUI (see CLI below).
Make your choice!
These are built into the app and selected from the "Hobbit tools" dropdown.
All-in-one editor for monster and summon battle files, organized as tabs sharing one file toolbar:
- AI — decompiles and edits monster AI scripts (conditions/commands) as readable pseudo-code.
- Seq — edits animation sequences (the byte-code that drives monster/summon animations).
- 3D — views the monster's 3D model and animations (mesh/wireframe, playback speed, bone list), with glTF export.
- Texture / Dynamic Texture — edits the monster's textures and palette-animation (VRAM) effects.
- Xlsx — exports/imports monster stats to/from an Excel spreadsheet for easy bulk editing.
Edits every text string in the game (dialogue, menus, items, names…), with CSV export/import for bulk translation work.
Edits which items each shop sells (Balamb, Dollet, Timber, Deling City…), and the per-slot "rare"
flag. (Item prices live in price.bin — see the Siren tool.)
Edits Triple Triad card values (ranks/elements) and which cards NPCs play with.
Edits every draw point in the game (field and world map), including which spell/quantity/refill rate it gives, and its position on the world map.
Edits GF data: general stats, learnable abilities, and character/GF junction compatibility.
Edits how items behave in menus (what they refine into, what they do when used, their parameters).
Views field character models and their animations (NPCs from chara.one and main characters from
main_chr.fs).
Edits GF refine abilities: which items/cards convert into which magic, and in what quantity.
Views and edits battle stage geometry/textures (a0stgXXX.x files from battle.fs).
Edits the battle sound archive (audio.fmt / audio.dat).
Edits each item's buy price and sell price multiplier (the sell price the shop pays back is
round((buy price / 10 / 2) * sell multiplier)). Ported from the original Siren tool.
Edits the 30 SeeD written tests (tutorial menu): the question texts, the expected answer of each
question, and the selectable choices (cursor stops) — the engine counts the stops at display time,
so a question can offer more than the standard YES/NO. Also edits the shared exam UI text. A live
in-game preview (using the real FF8 font widths from sysfnt.tdw) shows how each question lays out
and flags text that would overflow the vanilla window. Excel/CSV export/import for bulk editing.
These are external, standalone programs. The launcher can check for and download updates for them automatically (see the update button in the toolbar).
-
IfritGui — the original Ifrit tool for editing monster stats.
-
Siren —
price.bineditor (shop/item prices). Now also built in (see the Siren tool above); the standalone launcher is kept for reference.
-
Doomtrain —
kernel.bineditor (general game/battle data). -
Junkshop —
mweapon.bineditor (weapon data). -
Quezacotl —
init.outeditor (new-game starting data).
-
Jumbo Cactuar —
Scene.outeditor (field encounters). -
Deling — archive editor (browse/extract/repack the game's
.fs/.fi/.flarchives). -
Hyne — save file editor.
-
VincentTim — command-line texture converter for FF7/FF8
.tim/.texfiles (see its own README).
cli.py exposes GUI features as scriptable commands, useful for batch processing, translation
work, or CI pipelines without opening any window. Every tool runs headless (no Qt window) and
edits the same files as its GUI counterpart.
python cli.py <tool> <command> [options]
python cli.py --helplists every tool.python cli.py <tool> --helplists a tool's commands and their options.
Run it from the repo root (with the project's virtualenv active). The tools that need the game's
reference data load it automatically from FF8GameData/.
- CSV exports use
|as the delimiter; imports auto-detect|,;or,, so a file edited in Excel still re-imports cleanly. Theshumi-translatorandcidCSV formats match what the GUIs produce, so files are interchangeable between CLI and GUI. --output/-ois optional on most in-place editors: omit it to overwrite the input file, or give a path to write a copy. Import commands only touch the fields you changed, and a no-edit round-trip reproduces the original file byte-for-byte (exceptkernel.bin, whose text offsets are recomputed, andinit.out, which is grown to its full size so every item slot is editable — both matching the GUI's own save behaviour).
| Tool | Edits | Commands |
|---|---|---|
shumi-translator |
all in-game text (kernel.bin, mngrp.bin, namedic.bin, field/world/battle, exe) |
export-csv, import-csv, export-all, export-all-{field,battle,kernel,namedic,mngrp,exe,world}, compress, uncompress |
ifrit |
monster/summon c0m*.dat (stats, model, animation seq) |
export-xlsx, import-xlsx, export-gltf, import-gltf, export-seq-xml, import-seq-xml |
ifrit-ai |
monster AI scripts in c0m*.dat |
export-md, compile-md |
solomon-ring |
kernel.bin (all data sections, field-level) |
list-sections, list-fields, get, set, export-csv, import-csv |
tonberry-shop |
shop inventories (shop.bin) |
export-csv, import-csv |
siren |
item prices (price.bin) |
export-csv, import-csv, set-price |
junkshop |
weapon-upgrade recipes (mwepon.bin) |
export-csv, import-csv |
pupu-cargo |
item menu behaviour (mitem.bin) |
export-csv, import-csv |
pandemona |
GF refine formulas (mngrp.bin) |
export-csv, import-csv |
nida |
SeeD written tests (mngrp.bin) |
show, export-csv, import-csv, set-answer |
quezacotl |
new-game starting data (init.out) |
export-json, import-json |
ccgroup |
Triple Triad NPC card players (field .jsm) |
list, export-csv, import-csv, set-param |
cid |
draw points (exe .hext + world positions in wmset) |
export-csv, import-csv |
julia |
battle sounds (audio.fmt / audio.dat) |
list, export-wav, export-all, replace |
alexander |
battle stages (a0stgXXX.x) |
export-glb, import-glb |
seed |
field model containers (chara.one) |
list-models |
jp-font-builder |
JP font atlas for the ILP-JP mod | build, decode |
Text (translation workflow):
python cli.py shumi-translator export-csv --input kernel.bin --output kernel.csv
python cli.py shumi-translator import-csv --input kernel.bin --csv kernel.csv
python cli.py shumi-translator compress --input kernel.bin --output kernel_compressed.bin
python cli.py shumi-translator export-all --input-dir game_lang --output-dir csv_out
Binary editors (CSV round-trip, --output optional):
python cli.py tonberry-shop export-csv --input shop.bin --output shops.csv
python cli.py tonberry-shop import-csv --input shop.bin --csv shops.csv --output shops_new.bin
python cli.py siren set-price --input price.bin --item-id 24 --buy-price 3000
python cli.py junkshop export-csv --input mwepon.bin --output weapons.csv
python cli.py pupu-cargo export-csv --input mitem.bin --output items.csv
python cli.py pandemona export-csv --input mngrp.bin --output refine.csv
python cli.py nida show --input mngrp.bin --test 1
python cli.py nida set-answer --input mngrp.bin --test 5 --question 3 --answer 1
kernel.bin field editing (addressed by section → entry → field):
python cli.py solomon-ring list-sections
python cli.py solomon-ring list-fields --section 2
python cli.py solomon-ring get --input kernel.bin --section 2 --entry 1
python cli.py solomon-ring set --input kernel.bin --section 2 --entry 1 --field spell_power --value 99
python cli.py solomon-ring export-csv --input kernel.bin --section 2 --output magic.csv
New-game data as JSON:
python cli.py quezacotl export-json --input init.out --output init.json
python cli.py quezacotl import-json --input init.out --json init.json
NPC card players (a literal value, or var:N to read a savemap variable):
python cli.py ccgroup list --folder extracted_files/field/mapdata
python cli.py ccgroup export-csv --folder extracted_files/field/mapdata --output players.csv
python cli.py ccgroup import-csv --folder extracted_files/field/mapdata --csv players.csv
python cli.py ccgroup set-param --jsm bghall_1.jsm --player 0 --param rare-chance --value 99
Draw points (exe byte + world map position):
python cli.py cid export-csv --exe FF8_EN.exe --wmset wmset.obj --output draws.csv
python cli.py cid import-csv --csv draws.csv --exe FF8_EN.exe --wmset wmset.obj \
--output-hext draw.hext --output-wmset wmset_new.obj
3D models and sound:
python cli.py ifrit export-gltf --input c0m071.dat --output c0m071.glb
python cli.py ifrit export-xlsx --input extracted_files/battle --output monsters.xlsx
python cli.py alexander export-glb --input a0stg001.x --output stage.glb
python cli.py julia export-wav --fmt audio.fmt --index 1 --output sound.wav
python cli.py julia replace --fmt audio.fmt --index 1 --wav new.wav
You can help me releasing those tools on my Patreon
















