# Changelog of GLB to USDZ Converter - AR Quick Look Ready (API) (`sergeyfaraday/glb-to-usdz`) Actor

- **URL**: https://apify.com/sergeyfaraday/glb-to-usdz/changelog.md
- **Full Actor documentation**: https://apify.com/sergeyfaraday/glb-to-usdz.md

## Changelog

### 1.2.2 - 2026-08-19

- Input fields renamed in the console: `sourceKeyValueStore` → `uploadStore`, `sourceKeys` → `uploadRecords` (the Actor quality checker flags any input named *Key* as a possible secret; resourcePicker/stringList fields cannot be `isSecret`). The API keeps accepting the old names unchanged.

### 1.2.1 - 2026-08-18

- `webhookUrl` is a secret input field (`isSecret: true`): encrypted at rest, masked on task pages; the invalid-protocol warning no longer echoes the URL.
- Store discounts registered (Bronze/Silver/Gold+ tiers, price decrease only; Free plan unchanged): conversion-success 0.12/0.11/0.10/0.09, large-file-surcharge 0.10/0.09/0.08/0.07, validation-report 0.03/0.028/0.025/0.022, preview-render 0.02/0.018/0.016/0.015.

### 1.2.0 — 2026-08-15

- `outputPreview` activated — flat 800×800 PNG preview rendered with Chromium + three.js from the canonical scene, delivered as `preview-<hex>.png` with `previewUrl` in the report; bills `preview-render` ($0.02) only when the PNG actually ships; `PREVIEW_FAILED` warning (never fatal) on render errors; dedup reuses the first pass's preview by URL at $0
- `KHR_materials_specular` — approximated by folding the scaled dielectric F0 into an effective `ior` (`SPECULAR_APPROXIMATED`)
- `KHR_materials_anisotropy` / `KHR_materials_iridescence` — loud drop warnings (`ANISOTROPY_DROPPED` / `IRIDESCENCE_DROPPED`); previously silently ignored
- validateOnly accepts `sourceKeyValueStore`/`sourceKeys` for `.usdz` records
- Dedup rows now carry the first pass's real `arkitCompatible` verdict (per-run cache) instead of `null`
- `webhookUrl` deliveries go through the same DNS-vetted, connection-pinned transport as `source` fetches (SSRF guard, fail-closed)
- Pinned transport sends a default User-Agent (Akamai/Apple CDNs reject UA-less requests)
- `tests/e2e/` — 13-scenario end-to-end option matrix over the real pipeline, wired into CI
- No reserved options remain; platform-format schema fixes (numeric fields, dataset views)

### 1.1.0 — 2026-08-15

- `sourceUnits` option (`mm`/`cm`/`m`/`inches`/`feet`) — user-friendly unit selection resolving to the numeric scale
- `targetHeight` option — desired model height in meters; the converter measures the scene bounding box and computes the scale automatically
- `mode: validateOnly` — validate an existing `.usdz` URL without conversion ($0.03/file, input ≤ 50 MB)
- `targetMaxFileSizeMB` activated — `TARGET_SIZE_EXCEEDED` warning when the output exceeds the requested size, `failOn` decides delivery
- `webhookUrl` activated — batch summary POSTed on run completion (best-effort, 30 s timeout)
- Transmission approximation — `KHR_materials_transmission` maps to reduced opacity (`TRANSMISSION_APPROXIMATED`, replaces `EXT_UNSUPPORTED_TRANSMISSION`)
- Sheen approximation — `KHR_materials_sheen` maps to a roughness boost (`SHEEN_APPROXIMATED`, replaces `EXT_UNSUPPORTED_SHEEN`)
- Normal scale fold promoted to default — `normalScale` is baked into the normal texture scale/bias; `NORMAL_SCALE_DROPPED` retired
- Occlusion strength fold — `occlusionStrength` is baked into the occlusion texture scale; `OCCLUSION_STRENGTH_DROPPED` retired
- `AR_TEXTURE_BUDGET_WARNING` — warns when output textures exceed Apple's Quick Look recommendation (≤ 2048 px, ≤ 6 textures)
- `INVALID_SCALE_OPTIONS` — `sourceUnits`/`targetHeight`/numeric `unitScale` are mutually exclusive and fail loudly when combined
- README: AR sizing guide and Quick Look `preferredIblVersion` embedding tip

### 1.0.0 — 2026-08-15

Initial release.

- GLB/glTF to ARKit-validated USDZ conversion with machine-readable QC report
- Batch processing up to 200 files per run
- Full PBR material pipeline: baseColor, metallic-roughness, normal, occlusion, emissive
- ORM-packed texture splitting (occlusion/roughness/metallic channel separation)
- KTX2 and WebP texture transcoding to PNG/JPEG
- Texture resizing with configurable max dimension (1024/2048/4096)
- Draco and meshopt mesh decompression
- Animation preservation with STEP/CUBICSPLINE to LINEAR resampling at 30 fps
- ARKit ComplianceChecker validation gate with configurable `failOn` threshold
- UsdValidation framework advisory checks
- Native clearcoat and IOR support (KHR\_materials\_clearcoat, KHR\_materials\_ior)
- Vertex color to displayColor/displayOpacity mapping
- KHR\_texture\_transform support with UV flip composition
- Per-run deduplication (same file + same options = $0)
- Pay-per-event billing with fair-billing guarantee
- Budget preflight with graceful batch stop
- SSRF protection with DNS pinning and private-range blocking
- ZIP archive input with slip/symlink protection
- Key-value store input via resource picker
- Charge-last settlement ordering
- Input-derived SHA-256 idempotency keys
- reportOnly mode for validation without USDZ output
