A flexible container format for embedding multiple files within a single archive file. The FCA format supports version-specific header formats, allowing for extensibility and future enhancements.
The Flexible Concatenated Archive (FCA) format is designed to efficiently store and organize multiple embedded files within a single archive. It is optimized for use on extremely low-resource devices, making it ideal for embedded systems, IoT devices, and other constrained environments where memory and processing power are limited.
The format is particularly well-suited for storing collections of related files such as:
- Amiibo dumps (v2 and v3 formats)
- Skylander dumps
- Destiny Infinity dumps
- Lego Dimensions dumps
- Other binary file collections
The FCA format was designed with the following principles in mind:
-
Simple - The format is straightforward and easy to understand, with a clear structure that can be implemented with minimal code complexity.
-
Efficient - The format wastes as little space as possible, avoiding unnecessary padding or overhead. Every byte serves a purpose.
-
Flexible - The format allows room for growth and future expansion through versioning and dynamic header sizes. Different file types can be stored with type-specific metadata.
-
Identifiable - The format uses a dedicated file extension (
.fca) and magic bytes ("FCA") at the beginning of each file for easy identification.
FCA files (.fca extension) consist of:
- A global header with magic bytes "FCA" and a version number
- One or more embedded files, each with version-dependent headers containing file type and metadata
See SPEC.md for the complete format specification.
You can package both Python tools as standalone .exe files using PyInstaller.
- Windows with Python installed
- build dependencies installed in your Python environment
Install build dependencies:
python -m pip install -r python/requirements-build.txtGenerate python/small-logo.ico once from python/small-logo.png:
make build-iconAfter this, all exe builds reuse python/small-logo.ico directly (no reconversion per build).
From the repository root:
make PYTHON=python build-exesThis generates:
dist/windows/fca-encode.exedist/windows/fca-decode.exedist/windows/fca-tool.exe
make build-exe-encode
make build-exe-decode
make build-exe-toolIf you want to build newer versions of fca-tool.exe, build to a unique filename instead:
make build-exe-tool-uniqueThis creates dist/windows/fca-tool-<timestamp>.exe and avoids overwriting files.
make clean-buildUse python/fca_tool.py to run encoding and decoding from a single script.
Encode from an explicit list of files:
python python/fca_tool.py encode --output-file out.fca --input-files file1.bin file2.binEncode recursively from one or more directories:
python python/fca_tool.py encode --output-file out.fca --input-dirs dumps/ more_dumps/You can also combine both:
python python/fca_tool.py encode --output-file out.fca --input-files file1.bin --input-dirs dumps/Decode an archive:
python python/fca_tool.py decode --input-file out.fca --output-dir extractedLaunch GUI directly:
python python/fca_tool.py --guiIf run without subcommands, GUI mode starts automatically. In the GUI Encode tab, you can add individual files or add a folder recursively.
This repository includes a workflow at .github/workflows/build-exes.yml that builds:
fca-encode.exefca-decode.exefca-tool.exe
Targets:
windows-x64on GitHub-hostedwindows-latestwindows-arm64on a self-hosted runner labeledself-hosted,Windows,ARM64(manual workflow dispatch only)
The workflow runs windows-x64 on push, pull_request, and workflow_dispatch.
The windows-arm64 job runs only when manually triggered with build_arm64=true.