https://github.com/juunini/gltf-optimizer
Optimize glTF. Draco compress and convert texture to WebP.
https://github.com/juunini/gltf-optimizer
compress glb gltf gltf2 optimize
Last synced: 7 months ago
JSON representation
Optimize glTF. Draco compress and convert texture to WebP.
- Host: GitHub
- URL: https://github.com/juunini/gltf-optimizer
- Owner: juunini
- License: mit
- Created: 2022-12-24T07:45:33.000Z (almost 3 years ago)
- Default Branch: main
- Last Pushed: 2024-04-06T04:24:24.000Z (over 1 year ago)
- Last Synced: 2025-03-16T06:11:24.388Z (7 months ago)
- Topics: compress, glb, gltf, gltf2, optimize
- Language: TypeScript
- Homepage:
- Size: 24.6 MB
- Stars: 42
- Watchers: 2
- Forks: 11
- Open Issues: 7
-
Metadata Files:
- Readme: README.md
- License: LICENSE
- Roadmap: ROADMAP.md
Awesome Lists containing this project
README
GLTF Optimizer
![]()
![]()
![]()
---
## [Demo](https://juunini.github.io/gltf-optimizer)
## Caution
Only can compress `.glb` file now.
Will be support `.gltf` soon.## Introduce
Optimize glTF.
Draco compress and convert texture to WebP.Using [glTF-Transform](https://github.com/donmccurdy/glTF-Transform) and [webp-converter-browser](https://github.com/juunini/webp-converter-browser)
## Install
```bash
# If you want to use CLI
npm install --global gltf-optimizer# npm
npm install gltf-optimizer# yarn
yarn add gltf-optimizer# pnpm
pnpm add gltf-optimizer# bun
bun add gltf-optimizer# If you install and use browser side
cp node_modules/gltf-optimizer/draco3d/* .//
```## Usage
```ts
import { optimizer } from 'gltf-optimizer'// ...
// node (backend side)
const glb = fs.readFileSync('./target.glb')
const optimized = await optimizer.node(glb, { /* options */ })
fs.writeFileSync('./compressed.glb', optimized)// browser (frontend side)
const optimized = await optimizer.web(glb, { /* options */ })
// if using get-file-using-a-tag (https://github.com/juunini/get-file-using-a-tag)
download({ fileName: 'compressed.glb', arrayBuffer: optimized })
```## Usage(CLI)
```bash
gltf-optimizer -i model.glb
gltf-optimizer -i model.glb -o ./output
```## Command-Line Flags
| Flag | Description | Required |
|-|-|-|
| `--help`, `-h` | Display help | No |
| `--input`, `-i` | Path to the glTF or glb file. | :white_check_mark: Yes |
| `--output`, `-o` | Output path of the glTF or glb file. Separate resources will be saved to the same directory. | No, default `./` |
| `--emissiveStrength` | Emissive strength of the glTF file. | No, default `1.0` |
| `--draco.method` | `edgebreaker` or `sequential` | No, default `edgebreaker` |
| `--weld.tolerance` | Tolerance, as a fraction of primitive AABB, used when merging similar vertices. | No, default `0.0001` |
| `--simplify.enabled` | Enable/disable vertex simplification. | No, default `true` |
| `--simplify.ratio` | Target ratio (0-1) of vertices to keep. | No, default `0.75` |
| `--simplify.error` | Limit on error, as a fraction of mesh radius. | No, default `0.01` |
| `--texture.resize.resolution` | Maximum width/height to enforce, preserving aspect ratio. For example, a 4096x8192 texture, resized with limit [2048, 2048] will be reduced to 1024x2048. | No, default `1024` |
| `--texture.resize.filter` | Resampling filter method. LANCZOS3 is sharper, LANCZOS2 is smoother. | No, default `LANCZOS3` |