For easier access to its library, glTF-Transform offers a command-line interface (CLI). The CLI supports many of the features of the @gltf-transform/functions package, and some general tools for inspecting and packing/unpacking glTF or GLB files.


npm install --global @gltf-transform/cli

Help output:

  gltf-transform 3.1.2 — Command-line interface (CLI) for the glTF Transform SDK.

    ▸ gltf-transform <command> [ARGUMENTS...] [OPTIONS...]

  COMMANDS — Type 'gltf-transform help <command>' to get some help about a command

                                         🔎 INSPECT ──────────────────────────────────────────  
    inspect                              Inspect contents of the model                          
    validate                             Validate model against the glTF spec                   
                                         📦 PACKAGE ──────────────────────────────────────────  
    copy                                 Copy model with minimal changes                        
    optimize                             ✨ Optimize model by all available methods             
    merge                                Merge two or more models into one                      
    partition                            Partition binary data into separate .bin files         
    dedup                                Deduplicate accessors and textures                     
    prune                                Remove unreferenced properties from the file           
    gzip                                 Compress model with lossless gzip                      
    xmp                                  Add or modify XMP metadata                             
                                         🌍 SCENE ────────────────────────────────────────────  
    center                               Center the scene at the origin, or above/below it      
    instance                             Create GPU instances from shared mesh references       
    flatten                              ✨ Flatten scene graph                                 
    join                                 ✨ Join meshes and reduce draw calls                   
                                         🕋 GEOMETRY ─────────────────────────────────────────  
    draco                                Compress geometry with Draco                           
    meshopt                              Compress geometry and animation with Meshopt           
    quantize                             Quantize geometry, reducing precision and memory       
    dequantize                           Dequantize geometry                                    
    weld                                 Index geometry and optionally merge similar vertices   
    unweld                               De-index geometry, disconnecting any shared vertices   
    tangents                             Generate MikkTSpace vertex tangents                    
    reorder                              Optimize vertex data for locality of reference         
    simplify                             Simplify mesh, reducing number of vertices             
                                         🎨 MATERIAL ─────────────────────────────────────────  
    metalrough                           Convert materials from spec/gloss to metal/rough       
    unlit                                Convert materials from metal/rough to unlit            
                                         🖼  TEXTURE ──────────────────────────────────────────  
    resize                               Resize PNG or JPEG textures                            
    etc1s                                KTX + Basis ETC1S texture compression                  
    uastc                                KTX + Basis UASTC texture compression                  
    ktxfix                               Fixes common issues in KTX texture metadata            
    avif                                 ✨ AVIF texture compression                            
    webp                                 WebP texture compression                               
    png                                  PNG texture compression                                
    jpeg                                 JPEG texture compression                               
                                         ⏯  ANIMATION ────────────────────────────────────────  
    resample                             Resample animations, losslessly deduplicating keyframes
    sequence                             Animate node visibilities as a flipboard sequence      
    sparse                               ✨ Reduces storage for zero-filled arrays              


    -h, --help                           Display global help or command-related help.           
    -V, --version                        Display version.                                       
    -v, --verbose                        Verbose mode: will also output debug messages.         
    --allow-http                         Allows reads from HTTP requests.                       
    --vertex-layout <layout>             Vertex buffer layout preset.                           
                                         one of "interleaved","separate", default: "interleaved"
    --config <path>                      Installs custom commands or extensions. (EXPERIMENTAL) 


EXPERIMENTAL: Support for command-line configuration is experimental, and may have breaking changes in non-major releases. Please provide feedback on GitHub if this feature could be helpful to you.

Configuration installs custom commands or extensions in the CLI. Extensions will be available to any commands executed by the CLI, allowing operations on glTF files that would otherwise be unsupported — unofficial compression, texture formats, materials, and other features. Extensions must be implemented using the Extension API.


gltf-transform --help --config path/to/gltf-transform.config.mjs

Example configuration:

// gltf-transform.config.mjs
import { Extension } from '@gltf-transform/core';
import { ALL_EXTENSIONS } from '@gltf-transform/extensions';

// NOTE: The minimal implementation below does not read or write any data
// associated with the extension. See the Extension documentation and
// official implementations in the /examples package for full usage.
class GizmoExtension extends Extension {
 static EXTENSION_NAME = 'ACME_gizmo';
 extensionName = 'ACME_gizmo';
 write(context) { return this; }
 read(context) { return this; }

export default {
 extensions: [...ALL_EXTENSIONS, GizmoExtension],
 onProgramReady: ({ program, io, Session }) => {
     // Usage:
         .command('custom', 'Custom command')
         .help('Lorem ipsum dolorem...')
         .argument('<input>', 'Path to read glTF 2.0 (.glb, .gltf) model')
         .argument('<output>', 'Path to write output')
         .action(({ args, options, logger }) =>
             Session.create(io, logger, args.input, args.output).transform(customTransform(options))

// Custom transform example; clears materials.
function customTransform(options) {
 return async (document) => {
     for (const material of document.getRoot().listMaterials()) {

Writing extensions in TypeScript is strongly encouraged. However, gltf-transform.config.mjs must be written in, or compiled to, plain JavaScript.

Function symbol, f(📦) → 📦, where the argument and output are a box labeled 'glTF'.

Made by Don McCurdy TypeDoc documentation Copyright 2023, MIT license