Kanabo

From OniGalore
Kanabo
Developer: Iritscen
Version: 1.3.27.0
released 2026.06.18

Change log
Supports: Windows 10+, macOS 26+
Bug reporting:
#modding-tools channel on Discord

Kanabo, written by Iritscen, is a modding tool under development for macOS and Windows which aims to offer the same functionality as OniSplit but without the .NET dependency; Kanabo is written in C++ and built natively for each OS. It is being built from the ground up to understand and work with all versions of the game including the PlayStation 2 port and any known alphas and betas of the game. Kanabo currently understands only about a quarter of Oni's templates and has a limited subset of features:

  • Listing instances in game data files
  • Displaying the values of every field in the instance (for supported templates only)
  • Numerous filter and display options can be used to search and analyze the above information
  • Displaying textures and fonts visually
  • Exporting textures and fonts to PNG format
  • Exporting instances to .oni (OniSplit) format

Kanabo understands the templates related to character data, including geometry, textures and sounds, which was the minimal set of templates needed for the Iron Demon Revival Project. It also understands font-related data so that it could generate the images on OBD:Text encoding/Fonts.

Eventually Kanabo is planned to support repacking the game data into .dat/.raw(/.sep) files and to understand all the game data templates. More exciting features should come after OniSplit's functionality has been reproduced.

Subpages: Change log

Download

Commands

General information

These commands give you information about Kanabo.

--compliance/-c
Prints information on which templates Kanabo has been certified for working with.
--flags/-f
Lists the names of all flags defined across all certified templates. Useful as a reference when using the --filter-value argument on a flag set field.
--help/-h
Prints this help message.
--knowledge/-k
Prints Kanabo's knowledge of each certified template, showing the address of each field for all known game data formats, plus the template's total size. The --filter-tag argument will work with this operation to only show the desired template.
--typecodes/-t
Lists the names of all type codes defined across all certified templates. Useful as a reference when using the --filter-value argument on a type code field.
--version/-v
Prints the program version.

I/O options

How to specify source data and destinations for tasks.

--alias/-a [path/to/file]
Supplies path aliases listed in a text file. Path aliases allow you to reference files by shorthand names prefixed by a '@' when specifying a source or destination for an operation, e.g. "--source @airport". Here are some sample lines in a path alias file:
winr C:\path\to\Installations\Windows retail\GameDataFolder
airport C:\path\to\Installations\Mac retail\GameDataFolder\level4_Final.dat
(Obviously you want to use forward slashes if in macOS.)
If an alias points to a GameDataFolder directory, as with "winr" above, you can append a level number to the alias when you call Kanabo, e.g. "‑‑source @winr8", to have it resolve to the level data file for that level. Folder expansion works for the PS2's GDF as well, i.e. "/1" in the disc directory. Make sure not to end an alias name in the file with a number, e.g. "airport2", or Kanabo will assume it's a reference to level 2 within a GameDataFolder pointed to by an alias called "airport".
--dest/-d [path/to/file_or_folder]
Specifies the location to which files should be outputted, or the game data file or folder of game data files to create.
--output/-o [data for this option]
Overrides the default output file name for an exported file (which would be the name of the resource being exported). Do not include the file suffix when using this argument as the suffix will be determined by Kanabo.
--source/-s [path/to/file_or_folder1] [path/to/file_or_folder2] (...)
Specifies the game data file(s) or folder(s) of game data files to draw from.

Tasks

These are the actual operations you can perform on Oni game data.

--batch/-b [path/to/file]
Runs a series of commands listed in a batch file.
--display/-di
Displays an instance on the command line using a graphics protocol, if the user is in a graphics-capable terminal (currently supported: kitty on macOS (download), WezTerm on Windows (download)). Falls back to writing a temporary file and opening it with the default image viewer if the terminal does not support a graphics protocol. Supported types: TXMP and TXAN (textures/animations), TSFT and TSFF (font/font family). Must be used with the --filter-name argument to limit the instances to be displayed. Note that displaying a TXAN will omit the first frame of the animation because this is found in the initial TXMP; you should display the texture using the name of the animated TXMP to see the full animation.
--export/-e [data for this option]
Exports the desired instances from a game data file. Requires a format argument: "onix" exports OniSplit-compatible .onix files; "png" exports PNG/APNG images (assuming template support). Must be used with a filter argument to specify which instances to export.
--info/-i
Gives basic information about a game data file.
--list/-l
Lists the instances in a game data file.
--list-tables/-tab
Prints the raw descriptor tables in a game data file: template descriptors, name descriptors and instance descriptors. Use the tag filter if you only want to see one template.
--list-templates/-tem
Scans the .dat file(s) specified by the source argument (or all .dat files in the specified directory) and prints a sorted list of the template tags and their checksums across all files. If the checksum for a given template differs across the files specified, all checksums will be printed. Use the tag filter if you only want to see one template.

Filters

Filters allow you to limit the scope of a task. These are the primary filter options, but there are many adjustments to them under Modifiers.

--filter-index/-fi [data for this option]
Limits the results of a task to instances which match this index number or range of numbers. Specify a range with the '-' character.
--filter-name/-fn [data for this option]
Limits the results of a task to instances which fully match this name. Searching for "TRAMKON" will not return any results because there are no resources by that name. You must add the wildcard operator, '-': "TRAMKON-"; this will show all resources beginning with TRAMKON. You could also search for "-KON-" to see all resources with that string somewhere in their name. See the filter arguments under Modifiers for additional options.
--filter-size/-fs [data for this option]
Limits the instance list to instances whose total size (including aux data) matches the given expression. Use a comparison operator (e.g. ">100", "<=512"), a range (e.g. "100-200", inclusive), or an exact value (e.g. "256" or "=256"). All values are in bytes. Remember to use quotes around option values that use comparison operators or your shell will intercept them.
--filter-tag/-ft [data for this option]
Limits the results of a task to instances with the supplied tag. For BINA and OBJC subtypes, you can search with either the qualified or unqualified name, e.g. "TRIG" would show both TRIG and BINA/OBJC/TRIG, but "BINA/OBJC/TRIG" will only show the latter.
--filter-value/-fv [data for this option]
Filters the instance list to only show instances where the field specified by --filter-field contains the given value. Your input must align with the kind of data the field holds: for numeric fields, use a comparison operator (e.g. ">0", "<=10"), a range (e.g. "10-20" or "-5.0-5.0", inclusive), or an exact value (floats are compared with tolerance); you can also use a "!=" prefix to negate the match, e.g. "!=60" to find fields whose value is not 60, or "!=60-90" to find fields outside that range. For boolean fields, use "true"/"false" or "yes"/"no". For flag set fields, use "has:FlagName" to match when the named flag is set, "has no:FlagName" to match when it is not set, or "has none" to match when no flags are set; multiple flag conditions can be combined in one filter (e.g. "has:FlagA has no:FlagB") and all must be satisfied. For type code fields, use "type:TypeName" to match by type name, "type not:TypeName" to match any type other than the given name, or a numeric value to match by raw code. For textual fields, the match is exact and case-sensitive. Filtering using a syntax incompatible with the field's type will produce no results for that field.

Modifiers

These are additional settings for I/O, tasks, filters or even for other modifiers.

--display-scale/-ds [data for this option]
Sets the scale factor for image display with --display (default: 2x on Retina displays, 1x otherwise). Only takes integer values.
--filter-case-insens/-fci
Tells the name filter to be case-insensitive.
--filter-field/-ff [data for this option]
Adds onto the --list-fields modifier to the --list command, telling it to only show the field whose name matches the name you supply to this argument. Presumably you will also want to use the tag filter to avoid seeing any other templates besides the one with the field you're interested in.
--filter-name-partial/-fnp
Tells the name filter to validate on a partial match. This means you do not need to use the wildcard operator with the name filter in order to find esources that contain a partial string.
--filter-value-whole/-fvw
Modifies --filter-value to show all fields of each matching instance rather than only the field(s) that matched.
--list-fields/-lf
Tells the instance list command to show the names and values of each field in each instance. Outputs a large amount of text, so a filter must also be used with this option.
--overwrite-policy/-op [data for this option]
Sets the name collision policy when performing an export operation. Use "overwrite" (or "o") to overwrite an existing file without asking, "skip" (or "s") to automatically pass over the file, or "unique" (or "u") to automatically generate a unique file name for the new export.
--sanitize-policy/-sp [data for this option]
Sets the policy for how illegal characters in file names are encoded when exporting an instance. Use "unicode" (or "u") to replace illegal characters with their Unicode full-width equivalents (the default), or "html" (or "h") to replace them with HTML percent-encodings.
--show-field-offsets/-sfo
Tells the instance list command to show the byte offset of each field within its instance. Use this alongside the argument to list fields, otherwise it will have no effect.
--show-linkees/-sle [data for this option]
Controls whether the instance list command shows the instances which are linked to by filter-matched instances. Use "yes" to show matching instances followed by their linkees or "only" to show only the linkees rather than the matching instances themselves. Kanabo's default behavior is to not show linked-to instances, so using "no" with this option produces the same behavior as not using it at all. The search for linked-to instances is recursive: Kanabo shows instances linked to by the matching instance's linkees, and so on. When this option is set to anything other than "no", --list will require at least one filter argument to be supplied. Cannot be used together with --show-linkers.
--show-linkers/-slr [data for this option]
Controls whether the instance list command shows the instances which link to filter-matched instances. Use "yes" to show matching instances followed by their linkers or "only" to show only the linkers rather than the matching instances themselves. Kanabo's default behavior is to not show linking instances, so using "no" with this option produces the same behavior as not using it at all. The search for linking instances is recursive: Kanabo shows instances that link to the matching instance's linkers, and so on. When this option is set to anything other than "no", --list will require at least one filter argument to be supplied. Cannot be used together with --show-linkees.
--show-placeholders/-spl [data for this option]
Controls whether placeholder instances are shown in the instance list. Use "no" to hide them or "only" to show only the placeholders. Kanabo's default behavior is to show placeholders, so using "yes" with this option produces the same behavior as not using it at all.
--show-unnamed/-sun [data for this option]
Controls whether unnamed instances are shown in the instance list. Use "no" to hide them or "only" to show only the unnamed instances. Kanabo's default behavior is to show unnamed instances, so using "yes" with this option produces the same behavior as not using it at all.
--show-orphans/-sor [data for this option]
Controls whether orphan instances are shown in the instance list. An orphan is an unnamed instance that has no linkers (no other instance links to it). Use "only" to show only orphans or "no" to hide them. Kanabo's default behavior is to show orphans, so using "yes" with this option produces the same behavior as not using it at all. Cannot be used together with --show-linkers or --show-linkees.