# Music objects — model sources

Retrieved and prepared on 2026-09-27. These models are CC0 assets; they are not extracted from the reference website and do not reuse its application code.

| Local file | Original creator and source | License | Runtime bytes |
| --- | --- | --- | ---: |
| `boombox.glb` | Microsoft, 2017 — [Khronos glTF Sample Assets / BoomBox](https://github.com/KhronosGroup/glTF-Sample-Assets/tree/main/Models/BoomBox) | [CC0 1.0](https://creativecommons.org/publicdomain/zero/1.0/) | 759,476 |
| `cassette-player.glb` | Oday Abuzaeed — [Cassette Player / Poly Haven](https://polyhaven.com/a/cassette_player) | [CC0 1.0](https://polyhaven.com/license) | 764,012 |
| `ukulele.glb` | Joseph Burgan — [Ukulele 01 / Poly Haven](https://polyhaven.com/a/Ukulele_01) | [CC0 1.0](https://polyhaven.com/license) | 761,176 |
| `headphones.glb` | nisu, 2020 — [Headphones / OpenGameArt](https://opengameart.org/content/headphones) | [CC0 1.0](https://creativecommons.org/publicdomain/zero/1.0/) | 916,816 |

The active runtime loads exactly `headphones.glb`, `cassette-player.glb`, and `ukulele.glb`: 2,442,004 bytes (2.44 MB) in total. An original procedural vinyl record accompanies these three models. The old `boombox.glb` and `boombox-poster.jpg` are retained for provenance and potential rollback but are not loaded by the active scene. The poster is the original BoomBox sample screenshot from the same Microsoft/Khronos asset directory, not a rendered screenshot of this website.

`headphones-poster.svg` is an original vector illustration used while the 3D model loads, when WebGL is unavailable, and for reduced-motion preferences. It does not embed the author's preview photograph.

## Original downloads

- BoomBox: [original self-contained GLB](https://raw.githubusercontent.com/KhronosGroup/glTF-Sample-Assets/main/Models/BoomBox/glTF-Binary/BoomBox.glb), 10,614,184 bytes. Its [model-specific legal notice](https://github.com/KhronosGroup/glTF-Sample-Assets/blob/main/Models/BoomBox/README.md) identifies Microsoft and **CC0**, not the repository's general CC BY documentation license.
- Poster: [original screenshot](https://raw.githubusercontent.com/KhronosGroup/glTF-Sample-Assets/main/Models/BoomBox/screenshot/screenshot_large.jpg).
- Cassette Player: [official API file manifest](https://api.polyhaven.com/files/cassette_player), `gltf.1k.gltf` and all of its `include` dependencies.
- Ukulele: [official API file manifest](https://api.polyhaven.com/files/Ukulele_01), `gltf.1k.gltf` and all of its `include` dependencies.
- Poly Haven requests identified this project as `CloudMusicConcept-AssetResearch/1.0`; [API terms](https://github.com/Poly-Haven/Public-API/blob/master/ToS.md) permit downloading and self-hosting assets. No live Poly Haven API dependency is used by the website.

## Processing

Prepared with glTF Transform 4.4.0 and Sharp 0.34.3. Original source materials, colors, texture assignments, node transforms, geometry, indices and UVs are retained. No blanket recoloring or mesh decimation was applied.

1. Download the original GLB or the complete 1K glTF dependency set. Every Poly Haven download was checked against the official manifest's MD5.
2. Deduplicate identical texture resources only; materials and scene objects remain separate.
3. Limit texture dimensions to 1024 × 1024 while preserving aspect ratio. Convert base color/emissive/metallic-roughness textures to WebP quality 90.
4. Preserve the Poly Haven source 1K JPEG normal maps unchanged. Resize the BoomBox PNG normal map to 1K and encode it as lossless WebP.
5. Pack all images and buffers into each self-contained `.glb`.
6. Reopen each output and verify that the indices and all vertex attribute bytes match the source geometry. All output textures are 1024 × 1024.

The only required glTF extension is `EXT_texture_webp`, supported by Three.js's GLTFLoader using native browser WebP decoding. No Draco, Meshopt, KTX or external decoder is needed.

## Orientation and normalization

World-space bounds below already include the source node transforms. Normalize each loaded scene by its world bounds, rather than assuming a uniform source scale.

| File | World-space minimum | World-space maximum | Source nodes |
| --- | --- | --- | --- |
| `boombox.glb` | `[-0.009921154, -0.009771630, -0.010076245]` | `[0.009921154, 0.009771630, 0.010076245]` | `BoomBox`, quaternion `[0,1,0,0]` (180° around Y); one mesh and one material |
| `cassette-player.glb` | `[-0.064994454, -0.110760439, -0.000000006]` | `[0.064465992, 0.126057415, 0.048879890]` | `cassette_player_body` and `cassette_player_tape`, each quaternion `[0.707106829,0,0,0.707106829]`; tape is a separate movable node |
| `ukulele.glb` | `[-0.088930503, 0.000049248, -0.022010416]` | `[0.088930562, 0.527011931, 0.028751813]` | `Ukulele_01`, identity quaternion; instrument extends along +Y |

## Output checksums (SHA-256)

```text
3e01dfec5aa96839acb8cb419a7f664aeb782461ea3ac9701afd1fb31a41d668  boombox.glb
124c7a32aa7f3e5c318b80f9eb3353b6ad766210ce41d943dd8b7529a27b1db8  cassette-player.glb
d29402daaec4982312fbb2dd6e0d0412bb34c3bb1fecf6a7430dafafedfdc818  ukulele.glb
9a4583ce935eb93aee3ce934cd1492b2b3518a1e2151d936a4820aacaa45404d  headphones.glb
```

## Headphones conversion

The author uploaded the source as a publicly downloadable [OBJ + texture ZIP](https://opengameart.org/sites/default/files/headphones_0.zip). Its OpenGameArt asset page explicitly marks the model CC0. No login, paywall or restricted download was bypassed.

- Converted the original OBJ to binary glTF; all 3,324 source triangles, vertex normals and UVs are retained. The single runtime mesh has 2,868 unique position/normal/UV tuples.
- Converted units by a uniform scale of 0.001. World bounds: `[-0.044829477, 0.048563760, -0.016823156]` to `[0.044829164, 0.126991227, 0.016823156]`. Y is up. Normalize around the world-space center before composing the scene.
- Converted the original base-color texture to 1K WebP quality 92. Combined the original ambient-occlusion, roughness and metallic textures into standard glTF ORM channels at 1K.
- Converted the DirectX normal map to OpenGL by inverting its green channel, then saved it as lossless 1K WebP. UV V coordinates are flipped for glTF texture conventions.
- The original optional emissive texture is not enabled. No brand endorsement is implied by using this CC0 generic model.
- Exported and reopened with glTF Transform 4.4.0. The result is self-contained and only requires the same `EXT_texture_webp` extension already used by the existing runtime models.
