User Rating 0.0
Total Usage 0 times

Drop GLB file here or click to browse

Maximum file size: 100 MB

Is this tool helpful?

Your feedback helps us improve.

About

GLB (GL Transmission Format Binary) stores 3D scenes in a single binary blob, embedding JSON metadata, geometries, textures, and animations. When debugging assets or integrating with text-based pipelines, you need the human-readable GLTF variant. This converter parses the GLB container structure - validating the 0x46546C67 magic number, extracting the JSON chunk (type 0x4E4F534A) and binary chunk (type 0x004E4942) - then rebuilds the output as standard GLTF. Binary buffers can be embedded as Base64 data URIs or exported as separate .bin files. The parser enforces 4-byte chunk alignment per the Khronos specification, preventing corruption in WebGL runtimes that assume aligned memory access. Risk: Manual hex editing or improper chunk splitting breaks asset references. This tool validates chunk integrity and preserves buffer byte offsets.

glb gltf 3d-converter model-export binary-parser

Formulas

GLB File Structure:

Header = MagicNumber + Version + TotalLength

where MagicNumber = 0x46546C67 (4 bytes), Version = 2 (4 bytes), TotalLength = file size in bytes (4 bytes)

Chunk Structure:

Chunk = ChunkLength + ChunkType + ChunkData

ChunkLength (4 bytes, little-endian) = byte length of ChunkData

ChunkType (4 bytes) = 0x4E4F534A (JSON) or 0x004E4942 (BIN)

Base64 Encoding Overhead:

EncodedSize = OriginalSize × 43

If OriginalSize = 1 MB, then EncodedSize 1.33 MB

Chunk Alignment:

PaddedLength = ceil(ChunkLength4) × 4

JSON chunks padded with 0x20 (space), BIN chunks with 0x00

Reference Data

PropertyGLB (Binary)GLTF (JSON)Notes
File Extension.glb.gltfGLTF may have .bin sidecars
Magic Number0x46546C67N/AASCII "glTF"
Version22.0Both use GLTF 2.0 spec
JSON Chunk Type0x4E4F534AN/AASCII "JSON"
Binary Chunk Type0x004E4942N/AASCII "BIN\0"
Chunk Alignment4 bytesN/APadding with 0x20 or 0x00
Buffer StorageEmbeddedExternal or Data URIGLTF allows both
Typical SizeSmallerLarger (Base64 overhead)~33% increase with Base64
Use CaseWeb deliveryDebugging, editingGLB for runtime, GLTF for dev
Texture EmbeddingYesOptionalData URIs or file references
Animation DataBinary accessorsBinary or JSONKeyframes in buffers
Node HierarchyJSON chunkJSON rootSame structure
Material DefinitionsJSON chunkJSON rootPBR parameters
Khronos ValidatorSupportedSupportedgithub.com/KhronosGroup/glTF-Validator
Three.js LoaderGLTFLoaderGLTFLoaderSame loader for both
Babylon.js SupportYesYesSceneLoader.ImportMesh
Blender ExportNativeNativeFile → Export → glTF 2.0
CompressionDraco, KTX2Draco, KTX2Extensions for both
Morph TargetsSupportedSupportedBlend shapes in accessors
SkinningSupportedSupportedJoint matrices in buffers
LightsExtensionExtensionKHR_lights_punctual

Frequently Asked Questions

Textures stored in the GLB binary chunk are preserved. In embedded mode, they're converted to Base64 data URIs in the GLTF JSON (image.uri = "data:image/png;base64,..."). In external mode, they remain in the .bin file, and the GLTF references the buffer by index. The bufferView byte offsets are recalculated to maintain alignment.
This tool is unidirectional (GLB → GLTF). For reverse conversion, you need a GLTF-to-GLB packer that reconstructs the binary container, merges external .bin files, and writes the chunk headers. Tools like glTF-Pipeline or Blender's exporter handle bidirectional conversion.
Common causes: (1) Buffer URIs point to missing .bin files if you selected external mode but didn't download them. (2) Base64 data URIs are malformed due to incorrect padding. (3) The original GLB had custom extensions (KHR_materials_unlit, KHR_draco_mesh_compression) that aren't declared in the GLTF extensionsUsed array. Check the browser console for GLTFLoader errors.
The converter parses the GLB structure and extracts chunks, but it does not decode Draco geometry compression. The compressed buffers are passed through as-is. To use the output GLTF, your rendering engine must support the KHR_draco_mesh_compression extension (Three.js requires DRACOLoader).
Browser memory limits apply. Files under 100 MB process instantly. For 100-500 MB files, a Web Worker prevents UI freezing. Beyond 500 MB, you risk heap allocation errors. For massive models, use command-line tools like glTF-Transform (Node.js) that handle streaming buffers.
Use the Khronos glTF Validator (github.com/KhronosGroup/glTF-Validator). Upload your GLTF and .bin files. It checks for: invalid accessor bounds, missing required properties, incorrect buffer byte strides, and extension compatibility. The validator outputs a JSON report with errors/warnings.
Yes. The JSON is human-readable and can be modified in any text editor. However, if you change buffer byte offsets, accessors, or bufferViews, you must recalculate the indices manually. Tools like glTF-Transform or Blender's glTF editor provide safer APIs for programmatic editing without breaking references.