π Changelog#
v6.1.0 (2026-08-30)#
β¨ Added#
scfile maptiles: assembles.ol2D map tiles into JPEG or PNG images.scfile maptiles --region: selects localized game map assets.scfile maptiles --jpeg-qualityand--png-compression: control image encoding.scfile.convert.maptiles: added map tile scanning, collection, measurement, and assembly operations.GUI: added 2D Map tab.
GUI: added docs url to footer.
Options.backup_regionsandscfile mapcache --backup/--no-backup: control backups before region replacement.Options.max_mipmaps: limits decoded texture mipmaps. Use0to read metadata without image.API: added Pillow dependency.
π Changed#
TextureContent: source texture metadata is now stored inmetaand decoded data intexture.RegionContent: region coordinates and sector data are now namedx,z,offsets, andcounts.GUI: Map Cache overwrite warnings now apply only to output regions selected for replacement.
β οΈ Deprecated#
TextureContent.mipmap_count,TextureContent.format, andTextureContent.path_hash(useTextureContent.meta).RegionContent.rx,RegionContent.rz,RegionContent.sector_offsets, andRegionContent.sector_counts.
v6.0.0 (2026-08-26)#
β¨ Added#
Animations#
scfile animate: addedarms(),face(), andbody()commands for animation export to.glb.convert.arms(): exports first-person.mcvdanimation with.mcsbweapon and hands models.convert.face(): exports facial.mcvdanimation with.mcsbhead model.convert.body(): exports.mcalskeletal clips with.mcsbmodel.Options.preserve_clips: keeps every decoded.mcalclip during body animation export.McvdDecoder: standalone decoder instead of alias.mcvd_to_obj(),mcvd_to_glb(), andmcvd_to_fbx(): added named.mcvdconversions.
Handlers#
McsaDecoder: now supports blend shapes parsing.GlbEncoder: now exports blend shapes and morph animation clips.FbxEncoder: now exports armature and builtin bone animation clips.EfkmodelDecoder: now parses uv2, normals, tangents.HandlerStateandHandler.state: added operation lifecycle states.ModelMeta: added source model version, feature flags, and element counts.ModelContent.has()andModelScene.has(): report present model features.ModelDecoder.featuresandModelEncoder.features: declare model features supported by handlers.
Conversion#
scfile convert --include: filters source formats during directory conversion.scfile convert --layout: addeddump,relative, androotedoutput layouts.scfile convert --verbose: prints the result of every processed file.scfile.formats.registry: now defines built-in decoders, encoders, filename aliases, and supported conversion paths.scfile mapcache --biomes/--no-biomes: controls biome data export to.mcafiles.
Application#
GUI: added animation and settings tabs.
GUI: added forms for arms, face, and body animation export.
GUI: added configured game directory and persistent export settings.
GUI: reset output path to default on backspace if empty field.
Tools:
audit --relations: validates animation-to-model relations for arms, face, and body assets.Documentation: added Map Cache viewing and animation export guides.
π Changed#
Minimum Python version raised to
3.13.convert.auto()now returns destination path on success orNoneon skip.scfile convert --model-format(-F): now accepts one target format.scfile convert --output: default layout changed from flatdumptorooted.TaskFeedback: reworked with live progress, output location, and files summary.McWorld.find(): resolves Minecraft 26.1+dimensions/minecraft/overworld/regiondirectories.Documentation: updated most pages.
π Fixed#
GUI: disabled controls now display the unavailable cursor.
Model transforms: no longer modify source content.
Conversion: sources with colliding output paths no longer overwrite each other during conversion.
ποΈ Removed#
File Formats#
DaeEncoder(.dae): removed output format.Ms3dEncoder(.ms3d): removed output format.ol_cubemap_to_dds(): removed in favor ofol_to_dds().API: removed
as_*()conversion methods.
CLI#
scfile mapcache --raw: removed raw block ID export.CLI options
--relativeand--parent(replaced by--layout).
Library API#
Support of Python
3.11and3.12.FileEncoder.save_as()andFileEncoder.export_as(): replaced byEncoder.save(close=False)andEncoder.export(close=False).FileDecoder.decode(): removedseekparameter.FileDecoder.convert(): removedoutputparameter.FileEncoder.getvalue(): renamed toEncoder.to_bytes().FileEncoder.save()andFileEncoder.export(): removedmodeparameter.BaseContent.reset().scfile.core.typesmodule.
β‘ Optimized#
scfile convert --workers: processes files in parallel.convert.files.manual(): writes to staged temporary files before publishing output.
β»οΈ Refactored#
Application#
scfileentry point: moved toscfile.app.launcher.scfile.cliandscfile.gui: moved toscfile.app.cliandscfile.app.gui.
Core and Content#
BaseFile: renamed toHandler.Handler: no longer inheritsIOBase. Binary stream operations moved toHandler.io.StructIO: no longer inheritsIOBase. Wraps a binary stream.BaseFile.ctx: replaced by read-onlyHandler.context.BaseFile.suffix: replaced byHandler.suffix().FileDecoderandFileEncoderhook methods: renamed to protected_*methods.scfile.core.contentandscfile.structures: moved toscfile.content.ModelContent.versionandModelContent.flags: replaced byModelContent.meta.versionandModelContent.meta.flags.TexarrContentandNbtContent: replaced byArchiveContentandDocumentContent.FileTypeandBaseContent.type: renamed toFileKindandBaseContent.kind.FileDecoderandFileEncoder: renamed toDecoderandEncoder.scfile.core.structio: moved toscfile.io.base.scfile.core.options: moved toscfile.options.scfile.constsandscfile.enums: redistributed to more specific modules.Options.model_formats: replaced byOptions.targets, a mapping of content types to output formats.Options.full_chunk: renamed toOptions.extended_chunk.Options.on_conflictandscfile convert --on-conflict:overwriterenamed toreplace.
Conversion#
convert.convert: renamed toconvert.files.manual.convert.detect: replaced byconvert.files.autoandconvert.files.format.convert.factory: replaced byscfile.formats.registryandconvert.named.
v5.2.1 (2026-07-26)#
π Fixed#
FileEncoder.save(),FileEncoder.export(): close the encoder when serialization fails.
v5.2.0 (2026-07-24)#
β¨ Added#
OlDecoder: support forDXN_X(ATI1/BC4) textures.TextureKind: OL texture kind identifiers.OlKindUnsupported: error for unsupported OL texture kinds.decoders(),encoders(): access to registered decoder and encoder classes.converter(): source format aliases.scfile.formats: decoder and encoder class exports.detect.format(): input format detection by file name.TextureContent.path_hash: logical resource path hash.SafetyLimit: shared limits for decoded sizes and counts.LimitError: error for decoded values that exceed a safety limit.Development: public
audit,infoandprofiletools.
π Changed#
OlDecoder: default and cubemap textures are now detected from the OL kind field.OlDecoder: texture data is typed asDefaultTexture | CubemapTexture.Docs: expanded format descriptions and library usage guide.
Templates: updated binary format structures.
π Fixed#
McsaDecoder: facial bones and morph animation structure in model version 15.0.DaeEncoder:float_arraycounts in generated documents.OlDecoder: invalid compressed mipmaps now reportInvalidStructureError.
β οΈ Deprecated#
OlCubemapDecoder: useOlDecoderinstead.ol_cubemap_to_dds(): useol_to_dds()instead.
ποΈ Removed#
McsaCountsLimit: replaced byLimitError.
β‘ Optimized#
Ms3dEncoder: numeric data serialization (1.2 s β 20 ms).DaeEncoder,ObjEncoder: numeric data serialization.
v5.1.1 (2026-07-01)#
π Changed#
Templates: updated binary format structures.
π Fixed#
McsaDecoder: parsing blend shape flag in model version 15.0.
v5.1.0 (2026-06-03)#
β¨ Added#
McsaDecoder: support for model version 15.0.GUI: sidebar navigation.
π Changed#
BaseFile.location: now returns a meaningful source identifier.GUI: redesigned color scheme and component styles.
GUI: update check now caches results for 60 seconds.
v5.0.1 (2026-05-26)#
π Fixed#
GUI: incorrect language detection.
GUI: assets missing from the PyPI package.
v5.0.0 (2026-05-25)#
β¨ Added#
GUI#
Graphical interface: implemented with
PySide6and launched when no arguments are provided.ConverterTab: drag & drop, file type filters, output structure options.MapCacheTab:.mdatto.mcaconversion.VersionWidget: update check popup with GitHub release lookup.
CLI#
Command structure:
scfile convertandscfile mapcache.scfile.__main__: automatically runsconvertwhen a file or directory is given as first argument.--updates: update check option.--on-conflict: output conflict option (overwrite,rename,skip).params: Click typesFiles,Output,MapCacheDir,FormatsandOnConflict.
File Formats#
EfkmodelDecoder: new source format.efkmodel(geometry only).McalDecoder: new source format.mcal(animation library, no export).MdatDecoder: new source format.mdat(region cache).McaEncoder: new output format.mca(Anvil regions).FbxEncoder: new output format.fbx(geometry only).nbt.nbt: NBT encoding functions (encode(),compound(),list(), etc.).mca.mapping: block ID mapping table for the Anvil format.
Library API#
StructIO: unified stream class replacingStructBytesIOandStructFileIO.BaseFile: unified binary stream adapter for file paths, bytes and IO streams.FileDecoder.convert_to():outputparameter (IOStream).FileEncoder.transform()hook and transforms pipeline.RegionContent: world chunk container.RegionChunk,ChunkHeader: world chunk structures.ModelContent:uv2,tangentsandcolorsfields.FileEncoder,FileDecoder:prelude()hooks.
Model Data#
transforms: scene transformation functions.ModelMeshfields:uv2,tangents,colors,link_space,uv_origin,uv_sign,max_influences.ModelSkeletonfields:space,hierarchy.AnimationClip: replacedtransformswithrotationsandtranslations.SkeletonBone:slugproperty.Enums:
UVOrigin,UVSign,LinkSpace,SkeletonSpace,SkeletonHierarchy,AnimationTranslationandAnimationRotation.Type aliases:
EulerAngles,TransformMatrix,BindPose, etc.
Utilities#
Converter registry:
converters()andregistry()functions with the@converterdecorator for format pairs.scfile.utils: new package.files:resource(),resolve(),walk(),destination().versions:Versiondataclass with parsing and comparison.updates: update checking against GitHub API.regions: region merging from scattered map cache files.cli: callbacksversion_callback,updates_callback.
π Changed#
Library API#
UserOptions: renamed toOptions.UserOptions.parse_skeleton: renamed toOptions.skeleton.UserOptions.parse_animation: renamed toOptions.animation.UserOptions.overwrite: replaced byOptions.on_conflict.FileEncoder.save_as(),FileEncoder.export_as(): now returnSelf.
Model Formats#
Model decoders:
to_XXX()methods replaced byas_XXX(). They return an empty encoder;encode()must be called explicitly.Model decoders:
prepare()replaced by a transforms list.GlbEncoder._add_meshes(): writesuv2andtangentswhen present.DaeEncoder._add_controller_sources(): checksmax_influences > 0.McsaFileIO._links(): normalizes bone weights.Constants:
NBT_FILENAMESrenamed toSUPPORTED_NBT.Tests: coverage 100% excluding
scfile.gui.
π Fixed#
McsaDecoder: UV2 and tangent parsing (exported only to.glb).GlbEncoder: binary data for meshes without skinning links when a skeleton is present.
ποΈ Removed#
CLI:
--uniqueoption (replaced by--on-conflict rename).FileFormat.ITEMNAMES(replaced byFileFormat.NBT).McsaBoneLinksError(replaced by a silent fallback).scfile.cli.commands.py,scfile.cli.types.py,scfile.cli.utils.py.SceneCounts,MeshCounts.structures.types.enums.FileMode.
β»οΈ Refactored#
Modules#
core.io: moved tocore.structio.core.context: split intocore.contentandcore.options.structures.models: now containsanimation,mesh,skeleton,scene,flagsandvectors.consts.McsaUnits: moved toformats.mcsa.consts.consts.OlString: moved toformats.ol.io.StructBytesIO,StructFileIO: merged intoStructIO.convert.legacy: merged back intoconvert.formats.
Data Structures#
AnimationClip.transforms: split intorotationsandtranslations.ModelMesh.positions: renamed toModelMesh.vertices.ModelMesh.textures: renamed toModelMesh.uv1.TextureArrayContent: renamed toTexarrContent.TextureArrayDecoder: renamed toTexarrDecoder.TextureArrayEncoder: renamed toTexarrEncoder.NbtBytesIO: renamed toNbtBufferIO.McsaModel: renamed toModelDefaults.MeshOrigin: renamed toMeshBounds.
v4.4.1 (2026-05-21)#
π Fixed#
McsaDecoder: incorrect polygon count after converting quads to triangles.GlbEncoder: incorrect geometry produced from polygon quads.
v4.4.0 (2026-05-11)#
β¨ Added#
McsaDecoder: support for polygon quads in model version 12.0.
π Fixed#
McsaDecoder: version-specific flag sets for model versions 7.0, 8.0 and 9.0 or newer.McsaDecoder: polygon quads converted to triangles.
v4.3.0 (2026-03-04)#
β¨ Added#
McsaDecoder: support for model version 12.0.
v4.2.1 (2026-01-01)#
β¨ Added#
List of supported NBT files in
--versionoutput.
π Fixed#
Pyinstaller rich unicode bundle.
v4.2.0 (2026-01-01)#
β¨ Added#
NbtDecoder: new source format NBT (itemnames.datand synchronized configs).JsonEncoder: new output format.json.CLI:
--versionoutput now includes an emoji.
v4.1.2 (2025-10-17)#
β¨ Added#
CLI: usage hint when no arguments are provided.
v4.1.1 (2025-08-08)#
β‘ Optimized#
ObjEncoder: faster export (450 ms β 170 ms).
v4.1.0 (2025-08-06)#
β¨ Added#
TextureArrayDecoder: new source format.texarr.TextureArrayEncoder: new output format.zip.convert.texarr_to_zip(): new converter.
π Changed#
GlbEncoder: uses a single bind matrix.GlbEncoder: writes position accessor bounds.scfile.formats: package imports improved.
π Fixed#
GlbEncoder: glTF output for meshes without skinning links when a skeleton is present.
β‘ Optimized#
StructIO: faster array reads (.mcsaparsing 53 ms β 8 ms).
v4.0.0 (2025-05-25)#
β¨ Added#
GlbEncoder: new output format.glb.McsaDecoder,GlbEncoder: skeleton parsing and export through--skeleton.McsaDecoder,GlbEncoder: built-in animation parsing and export through--animation.OlCubemapDecoder: cubemap texture decoder.OlDecoder: support forRGBA32F(DX10) textures.CLI:
--parentoption.
π Changed#
Textures: cubemap textures fall back from default texture decoding on failure.
CLI#
Batch conversion: unexpected errors no longer interrupt processing.
--model-formats: renamed to--mdlformat.--hdri: renamed to--cubemap.--no-overwrite: renamed to--unique.Default model output format changed to
.obj.Default model output format with
--skeletonchanged to.glb.
Core#
FileDecoder.validate(): renamed toFileDecoder.validate_signature().FileDecoder.convert_to(),convert():options: UserOptionsparameter.FileDecoder,FileEncoder: removed content reset onclose().FileContent: new propertytype: FileType.FileFormat: new propertysuffix: str.
β‘ Optimized#
McsaDecoder: array reads throughStructIO(model parsing 12Γ faster).CLI:
files_mapreplaced by an iterator, eliminating startup delays on large directories.
v3.6.1 (2024-11-13)#
π Fixed#
DdsEncoder: incorrect alpha channel mask in.ddsoutput.
v3.6.0 (2024-09-06)#
β¨ Added#
CLI: new command-line interface.
OlDecoder: partial support for cubemap textures (first face only).
v3.5.4 (2024-06-15)#
π Changed#
ObjEncoder: material names now included in.objoutput throughusemtl.
π Fixed#
CLI:
scfilecommand is now installed correctly bypip.
v3.5.0 (2024-05-31)#
β¨ Added#
McsaDecoder: support for model version 11.0.OlDecoder: support for all mipmap levels.
π Changed#
CLI:
--outputnow accepts only a directory.convert.auto(): default model export formats changed to.objand.ms3d.Textures: raw formats preserved without conversion to
RGBA8.McsaDecoder: bone link parsing disabled pending output format support.
ποΈ Removed#
Textures: support for
RGBA32Ftextures (used by one known asset).
v3.4.1 (2024-05-31)#
π Fixed#
DaeEncoder: non-functional test skeleton removed from exported scenes.
v3.4.0 (2024-05-29)#
β¨ Added#
DaeEncoder: new output format.dae(COLLADA).
π Changed#
FileDecoder.decode(): file position reset to the beginning after parsing.McsaFileIO: decoded floats rounded to six decimal places.
ποΈ Removed#
mcvd_to_*: conversion functions removed because.mcvdand.mcsause the same structure.
β»οΈ Refactored#
Formats: moved to
scfile.file.formats.Core: base classes moved to
scfile.file.base.Core: data components moved to
scfile.file.data.CLI: entry point moved from
scfile.__main__toscfile.cli.Models: dataclasses reorganized.
Core: general structure reorganized.
v3.3.1 (2024-05-14)#
β¨ Added#
Ms3dBinEncoder: new output format.ms3d(MilkShape 3D Binary).Ms3dAsciiEncoder: new output format.txt(MilkShape 3D ASCII).
π Changed#
CLI: default export formats now include
.objand.txt.CLI: implementation moved to a dedicated module.
Models: model dataclasses updated.
v3.2.0 (2024-04-30)#
π Changed#
Core: general code cleanup.
β‘ Optimized#
McsaFileIO: faster model parsing.
v3.1.0 (2024-04-14)#
β¨ Added#
Models: partial support for source format
.mcvd(animations unsupported).
π Changed#
Core: internal API updated.
v3.0.3 (2023-03-25)#
π Changed#
Models:
.objexport now uses mesh names as object groups.Models: float output precision moved to a constant.
FileDecoder: file open mode is now exposed as a property.
v3.0.0 (2024-03-20)#
β¨ Added#
Models: vertex normals parsing.
Textures: support for normal map textures.
Textures: conversion from
BGRA8,RGBA32FandDXN_XYtoRGBA8.Tests: initial pytest coverage.
π Changed#
Core: internal API rewritten.
v2.0.0 (2023-12-20)#
β¨ Added#
Models: support for all known model versions.
Models: safety limits for corrupted files to prevent excessive memory use.
Textures: support for all known texture formats.
CLI: multiple input files.
π Changed#
Core: internal API updated.
Models: model data structures changed from
dicttolist.Models: skeleton parsing disabled pending output format support.
β‘ Optimized#
Models: parsing up to 10Γ faster for common files.
v1.4.2 (2023-10-20)#
π Changed#
ObjFile: object group renamed from<Root>to the source file name.utils.func: renamed toutils.convert.scfile.reader.enums: reader enums moved to a dedicated module.DDS: header structure moved to
dds_structure.
v1.3.2 (2023-10-18)#
β¨ Added#
First stable release.