All notable changes to MetaHuman Engine are documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Added structured dialogue request metadata so language preference, speech configuration, and recent vision context travel together with each chat turn
- Persisted speech preferences and recent vision context in
digitalHumanStore, and localized the voice interaction panel for multi-language TTS flows - Added custom avatar upload, replacement, fallback-to-built-in handling, and avatar management controls in the settings drawer
- Added endpoint discovery with primary/backup failover for health checks, standard chat requests, and streaming chat requests
- Added touch/WebXR readiness detection and surfaced an
AR Readyplatform indicator in the HUD - Added immersive WebXR AR session entry/exit flow, persisted immersive session state, and a viewer bridge that forwards the active XR session to the Three.js renderer
- Added operator-facing endpoint routing diagnostics so the HUD now surfaces the active service endpoint and failover count
- Added a shared avatar source adapter so page composition, settings UI, and controller fallback logic reuse the same source/status/object-URL decisions
- Removed repository-scoped AI workflow frameworks and generated automation from
.trellis/,.claude/, and.opencode/ - Simplified contributor guidance to a minimal
AGENTS.md/CLAUDE.mdsurface - Removed residual AI workflow docs from
docs/agents/and deleted the repository Copilot instruction file - Dropped the duplicate root
docs/api/,docs/architecture/, anddocs/guide/trees in favor of the canonical localized docs - Removed the legacy
/advancedand/digital-humanapp aliases so the product runtime has a single/appentry - Removed deprecated module-level dialogue orchestrator wrappers and kept orchestration instance-scoped
- Stopped exposing changelog navigation in the landing page and docs site
- Corrected stale docs and Pages copy that still claimed Docker, Render, CLI scaffolds, templates, and old backend paths
- Consolidated historical notes from the removed
changelog/directory into this file
- 2026-05-22 — Scoped dialogue runtime to the service container, normalized
DigitalHumanEngineinvalid inputs, and tightened broad UI subscriptions - 2026-05-21 — Removed the dead
DigitalHumanViewerpass-through export, centralized service adapters, and moved dialogue orchestration away from module-level state - 2026-05-15 — Removed the deprecated voice command processor and clarified the four-file service container structure
- 2026-05-12 — Consolidated voice command handling into
src/core/voiceCommand/ - 2026-05-12 — Added automatic language detection and persisted language preference for GitHub Pages
2.2.0 - 2026-04-29
- Python Backend — Moved
server/toexamples/backend-python/as optional reference implementation - Project Structure — Clarified backend is optional, frontend is zero-config by default
- README — Added backend optional note, unified Node.js ≥22 requirement
- docs/guide/ — Removed Python prerequisite, updated project structure
- docs/index.md — Fixed version number (v1.0.0 → v2.1.0)
- changelog/ — Removed duplicate CHANGELOG.zh-CN.md
- build-pages.sh — Added sitemap generation, build timestamp, size output
- .gitignore — Added
*.tsbuildinfo, updated Python comments - .vscode/ — Added settings.json and mcp.json
2.1.0 - 2026-04-29
- Dialogue Orchestrator — Introduced
turnId-based ownership isolation;finalizeDialogueTurnonly executes cleanup when the current turnId matches, preventing cross-turn state corruption - Chat Session Store — Added local persistence (sessionId + chat history), message limit enforcement (100 max), transient streaming placeholder filtering, and robust deserialization with type guards
- System Store — Added
ConnectionDiagnostics(health check latency, degraded state tracking),recordConnectionHealth()action, and factory functions for initial metric state - Audio Service — Fixed optional property assignments for ASR config (non-null assertions for constructor-initialized defaults)
- Chat Transport — Fixed TypeScript union type narrowing for
WSServerEventafter while-loop guard; addedas constassertions for literal types - WS Client — Removed unused
resolveConnectfield
- Removed 20+ dead files:
.omc/,Dockerfile,docker/,docker-compose.yml,render.yaml,lighthouserc.json,docs/superpowers/,docs/portal.html,RELEASE_NOTES.md,CHANGELOG.zh-CN.md,CLAUDE.local.md, and more - Removed 3 worktrees:
final-terminal-state,p0-foundation-observability,fix/ci-tests - Removed 4 stale branches: Only
masterremains - Rewrote
.gitignore: Clean categorized structure, removed duplicates
- AGENTS.md — Deep rewrite with file change impact matrix, debug decision tree, and prohibited actions checklist
- CLAUDE.md — Streamlined for Claude Code-specific workflow; added Zustand 5 and TW4 gotchas
- copilot-instructions.md — Reduced to essential quick-reference index
- README.md / README.zh-CN.md — Fixed CI badges (main→master), updated version badges (React 19, Vite 6, Three.js 0.177), removed Render deployment section, corrected path alias table (
@/*→src/*) - CHANGELOG.md — Fixed broken migration guide link
- ci.yml — Replaced hardcoded release body with
generate_release_notes: true - build-pages.sh — Removed portal.html copy; React LandingPage is now the Pages entry point
- OpenSpec — Updated config.yaml tech stack versions; archived p0 change proposal
- Fixed 2 test failures caused by
speakWithbecoming fire-and-forget (microtask flush needed before assertion) - Fixed ESLint errors from unused catch variables in audioService.ts
1.1.0 - 2026-04-27
- TypeScript Strict Mode — Enabled
strict,noUnusedLocals,noUnusedParameters,noFallthroughCasesInSwitch - Fixed 31 type errors across the codebase
- Removed unused React imports from component files
- Fixed type safety issues in
chatTransport.tsandwsClient.ts
- Unified
buildEmptyResponsefunction betweendialogueService.tsandchatTransport.ts - Exported
buildEmptyResponsefromdialogueService.tsfor reuse
- Unified Node.js version requirement to ≥ 20 across all documentation
- Updated Bundle Size badge to reflect actual gzipped size (~240KB)
- Added
.nvmrcfile for Node.js version management - Created
server/requirements.lockfor Python dependency pinning - Enhanced
AGENTS.mdwith testing guidelines and refactoring standards
1.0.0 - 2025-04-22
MetaHuman Engine reaches its first stable release with a complete feature set and comprehensive documentation.
- 3D Avatar Engine — Real-time Three.js rendering with emotion-driven expressions and skeletal animations
- Voice Interaction — TTS synthesis and ASR recognition via Web Speech API
- Visual Perception — MediaPipe face mesh and pose estimation for emotion/gesture detection
- Dialogue System — OpenAI-compatible chat with streaming (SSE) and WebSocket support
- State Management — Three focused Zustand stores:
chatSessionStorefor message historysystemStorefor connection/performance metricsdigitalHumanStorefor avatar runtime state
- Transport Abstraction — Unified interface for HTTP/SSE/WebSocket with auto-selection
- Device Capability Detection — Adaptive rendering based on hardware tier
- Frame skipping for low-end devices
- Visibility-based animation pausing
- Adaptive DPR, shadows, and particle counts
- Render performance tracking (FPS metrics)
- Consolidated duplicate visibility handlers into
useIsTabVisibleRefhook - Extracted
rotateCameraHorizontalhelper for camera controls - Created typed constants
TRANSPORT_LABELSandCONNECTION_STATUS_TEXT - Replaced
console.*calls with structured logger - Added
useCallbackoptimization for keyboard handlers
- Added abort controller support for request cancellation
- Improved streaming with proper cleanup on abort
- Enhanced error handling with graceful degradation
- Unified dialogue turn preparation logic
- Enhanced
dispose()cleanup to prevent memory leaks - Added preset timer clearing in ASR service
- Improved generation tracking for callbacks
- Memory leaks from event listeners without cleanup
- Unnecessary re-renders from broad store subscriptions
- Race conditions in dialogue orchestration
- TTS false error reporting
- Voice command misfiring
- WebSocket exception handling
- Animation state residue after unmount
- useEffect infinite reload issues
0.9.0 - 2025-03-18
- Architecture refactor with state domain separation
- Abstracted
ChatTransportinterface - HTTP, SSE, and WebSocket transport implementations
useAdvancedDigitalHumanControllerhook
0.8.0 - 2025-02-25
- SSE streaming dialogue integration
- Progressive message display
firstTokenMsandresponseCompleteMsperformance tracking
0.7.0 - 2025-01-24
- Web Speech API integration for TTS
- Queue management and interruption support
- Browser-native speech recognition (ASR)
- Command mode vs dictation mode
0.6.0 - 2025-01-23
- Component structure:
DigitalHumanViewer,ChatDock,TopHUD,ControlPanel - Tailwind CSS integration
- Dark mode support
- Responsive layout
This project follows Semantic Versioning:
- MAJOR — Incompatible API changes
- MINOR — New features, backward compatible
- PATCH — Bug fixes, backward compatible
See release notes in each version's GitHub Release page.