Changelog
v2.1.0 Latest
Business model: Freemium
- Free tier available forever; the 6-hour trial is gone: models / data tagging up to 50 MB per file, batches of up to 5; licensed files up to 500 MB
- License verification upgraded to Ed25519 asymmetric signatures + device fingerprint binding (machine-uid derived) — one key per machine, offline verification
- Activation state now encrypted with AES-256-GCM
- New Account page: license tier, expiry date, feature permissions, and License Key activation
- 3D Viewer, screenshot export, video recording and operation history are free and unlimited forever
- Licensing service rebuilt: license-server is now the official licensing service (Ed25519 issue/verify + security audit); the legacy AES-256-CBC service was removed
New: Data Tagging
- Edit userData key-value pairs on model nodes with a three-column layout: node tree + 3D click-to-select viewport + data editor
- JSON import / export (directly compatible with Three.js userData), global tag preview, orphan and redundant data repair
3D Viewer enhancements
- New left toolbar: unified entry for Lights, Section and Environment panels
- Section clipping: single-axis clipping + position slider + direction invert; light guides are clipped away with the model
- Animation preview: multi-clip selection, play / pause / stop, 0.1x–3x speed
- Environment panel: floor texture (lines / checkerboard), size and opacity, ambient and sun intensity
- Default IBL environment lighting (RoomEnvironment) — dark and metallic materials stay readable without extra lights
Platform support
- New Linux and macOS support (deb / rpm / dmg / app packages; AppImage pending real-machine builds)
- Web version: SEO optimized with generated icons; primary domain zipoly-web.raychart.cn
- Sidebar shows the current version and auto-detects new Gitee releases
- Pinned @tauri-apps dependency versions (removed
^ranges) for reproducible builds
Other
- Docs site CSS modular refactor; screenshots archived under public/screenshots/
- Fixed inconsistent dialogs and thresholds for oversized textures and model import
v2.0.1 Previous
Fix: removed all external CDN dependencies
- Draco decoder and KTX2 transcoder now load fully locally — no more gstatic.com / jsdelivr.net
- Web version fonts switched to local @fontsource packages; Google Fonts removed
- Tauri desktop CSP tightened; external whitelist for googleapis/gstatic/jsdelivr removed
- Better availability and load speed in offline or network-restricted environments
v2.0.0
Architecture: compression engine abstraction layer
- Compression module refactored with a unified engine interface (
CompressionEnginetrait), enabling hot-swappable Draco / Meshopt - Engine fallback improved: if Meshopt is unavailable, Zipoly silently switches to Draco and notifies via a toast
- Unified compression parameter model covering geometry quantization, textures, scene graph and mesh simplification
New: scenario-based presets
- Four one-click presets for real business scenarios: Web 3D, mobile apps, industrial visualization, e-commerce product showcase
- Each preset recommends an engine (Meshopt / Draco) and fills in optimal parameters — no manual tuning needed
- Presets remain fully adjustable
New: smart engine recommendation
- After import, the model's vertex count, texture count, node count and other features are analyzed automatically
- An engine recommendation is given based on model characteristics, cutting selection effort
Meshopt engine enhancements
- Mesh simplification (
-siratio) and aggressive simplification mode (-sa) - GPU Instancing automation (
-mi) and node merging (-mm) - Real-time gltfpack stdout parsing with staged progress: "geometry compression → texture optimization → writing file"
KTX2 texture compression enhancements
- New UASTC high-quality mode (for e-commerce / product showcase)
- Finer texture quality control (levels 1–10 mapped to basisu
-q) - Full texture + geometry pipeline integrated under the Meshopt engine
Other optimizations
- draco_transcoder binary slimmed from 6 MB to 2.5 MB
- Fixed batch engine selection not propagating correctly after switching engines
- Result comparison dialog now shows the engine name used
- Docs site fully rewritten with dedicated Texture Optimization, License and Changelog pages
v1.0.2 Stable
New: Meshopt compression engine
- Integrated gltfpack with meshopt geometry compression + vertex cache optimization — overall ratio better than Draco
- New engine selector to switch between Draco and Meshopt
- Automatic fallback to Draco with a toast when Meshopt is unavailable
- Dedicated texture settings dialog for the Meshopt engine (BasisU ETC1S / UASTC)
New: KTX2 texture support
- KTX2 format added to Draco texture settings (ETC1S mode, encoded via basisu)
- Mipmap chain toggle — disabling saves ~33% size
- Max texture edge length switched to quick-select buttons (512 / 1024 / 2048 / 4096)
New: Texture Optimization tab
- Dedicated texture page: compress, scale and convert single PNG / JPG / WebP images, plus KTX2 conversion
- The viewer can preview KTX2 and WebP images directly
New: health check panel
- Automatic health scan on import flags potential issues (duplicate vertices, oversized textures, missing normals, etc.)
Improvements
- Nav icons renamed to English-named SVGs, fixing Windows Chinese-path issues
- Sidebar "About" now links to the online docs
- Fixed batch compression engine selection not being passed correctly
v1.0.1
- New 3D viewer time-of-day lighting (24-hour sunrise/sunset simulation)
- New custom lighting panel (point / directional / spotlight)
- New screenshots (PNG) and video recording (WebM 30fps)
- New batch compression pause / resume / cancel controls
- New advanced quantization panel (qp / qn / qt / qa, Draco only)
- Improved Chinese path handling, fixing Windows special-character paths
- Fixed error when re-compressing an already compressed file
v1.0.0
- First release
- Draco compression for glTF/GLB (levels 1–10)
- Single-file and batch modes
- Format conversion (OBJ / FBX / STL / DAE / PLY → GLB / glTF)
- Texture optimization (auto downsampling + JPEG recompression)
- Operation history (with parameter reuse)
- Compression result comparison dialog
- Built-in Three.js 3D viewer
- Offline licensing (hardware-ID bound)
Zipoly Server
The server edition (private deployment for enterprises) versions independently from the desktop app. Release history below.
v2.1.0
Conversion engine rebuilt (assimp 5.4.3)
- assimp replaces the previous implementation; input: glb / gltf / fbx / obj / stl / dae / ply / vrm; output: glb / gltf / obj / stl(stlb) / ply(plyb) / dae
- Fixed GLB→OBJ white-model issue and GLB degenerate faces
Texture optimization & KTX2
- New texture optimization (single-image PNG / JPG / WebP processing)
- KTX2 encoding (basisu 1.16): ETC1S / UASTC modes (both the compression path and single-image texture optimization), encode performance improved 45s → 15s
- Meshopt UASTC mode supports texture quality levels (1–10 mapped to basisu -q)
Batch tasks deeply optimized
- Batch ZIP downloads now built in memory with Stored compression, eliminating temp-file races — 25s → 2s
- Download loading feedback, auto-completed compression params, download button appears when done
SSE real-time push
- Task / batch status pushed in real time, replacing polling; automatic fallback to polling on disconnect
- Backend supports direct CORS connections, fixing long-lived connection truncation through the Vite proxy
Configuration system
- Config page truly reads/writes config.yaml (with BOM compatibility)
- Data retention extended from 24h to 168h (7 days)
- Completed system settings / service restart endpoints
Admin UI
- Dashboard visual redesign, data fixes, hour-aligned chart axes, adaptive card heights
- Task management adds GLB model preview (Three.js + Draco WASM local decoding)
- Batch task / task list UI deep optimizations
Licensing
- Verification switched to Ed25519 asymmetric signatures (same public key as license-server); activation state AES-256-GCM encrypted
- Server-side license tiers: Free / Pro / Enterprise (reported via capabilities endpoint)
Docker delivery
- Image tag:
zipoly-server:2.1.0(latest synced); release bundle = image tar + docker-compose.yml + Dockerfile + docker/ (config.yaml, entrypoint.sh, nginx.conf) - Dockerfile uses BuildKit build cache (npm / cargo registry / target mounts) for incremental rebuilds
- Fixed cache mounts dropping binaries from the image layer (artifacts copied across stages via /out)
- Data directory unified to
/app/zipoly-datainside the container (uploads / results / SQLite); compose volume mounts aligned - Fixed API Key missing causing the container to keep Restarting (compose injects
dev-api-key-123by default; production must replace it with a strong key)
Fixes
- Task list query missing owner_key_id field returned empty arrays
- Task filenames lost after restart; task file residue cleanup
- SSE global watch duplicate registration, fallback polling false triggers, useEventSource init timing
- updateLicense request body field aligned with the backend (license_key)
v1.0.0
- Server edition first release
- Desktop compression capabilities wrapped as a RESTful HTTP API (Draco / Meshopt compression, format conversion, texture optimization, model repair, health check, batch processing)
- Single-container Docker deployment (Rust/Axum backend + nginx reverse proxy) with a built-in web admin console
- API Key auth, rate limiting, input validation and other security measures
- Trial mode + License Key activation